Java内功修炼系列一工厂模式】的更多相关文章

工厂模式是一种创建型模式,它提供了一种新的创建对象的方式,一般情况下我们都习惯用new关键字直接创建对象.有时候会遇到这种情况,我们需要根据具体的场景选择创建什么类型的对象,可能有多种类型都能选择,但一次只能选一种,针对这种对象可以选择性创建的情况工厂模式就显得十分好用了.工厂模式嘛,顾名思义就是一个很大的工厂,里面有各种我们需要的产品,我们可以根据自己的需求选择买哪种产品,只要告诉工厂我们想要的产品即可.还有一种是抽象工厂模式,这种模式中,我们请求一个具体的产品时,工厂会去找该对象所属类型的工…
代理模式是JAVA设计模式之一,网上设计模式相关的博文铺天盖地,参考它们有助于自己理解,但是所谓“尽信书不如无书”,在参考的同时也要思考其正确性,写博客也是为了记录自己理解知识点的思路历程和心路历程,所以在经过调研.实践之后能把自己所掌握和理解的东西写下来,无论对错,错了只能说明当下的理解不够完整,更重要的是能够在以后遇到相同的问题时回头看看,反思当初这么写到底有没有问题,毕竟是自己写的,错了还可以进行纠正,想必每个写博客记录自己学习过程的人,都不会刻意去写误导别人的东西,有点扯远了,其实想说的…
在上一节的拦截器中提到,程序的设计者一般会用拦截器替替代动态代理,将动态代理的逻辑隐藏起来,而把拦截器接口提供给开发者,使开发者不需要关系动态代理的具体实现过程,但是有时候需要多个拦截器,而且拦截器之间会相互依赖,比如我们从公司的OA上提交一个请假单的时候,这个请假单会经过直接主管.部门经理.人力资源的层层审核,在请假被批准之前会被各级部门领导进行拦截,而且人力的审核依赖部门经理的审核结果,部门经理的审核又依赖直接主管的审核结果,这里的直接主管.部门经理和人力资源就像是三个拦截器,请假单这个对象…
观察者模式又称发布-订阅模式,就是观察者通过订阅被观察者,或关注被观察者,从而实时更新观察者的信息.比如我们玩微博的时候,如果关注了一些博主,那么当博主发动态时,在首页微博列表中就会自动更新这些博主发的微博,而不需要我们自己去获取.其中我们(粉丝)就是观察者,博主是被观察者,关注就相当于订阅,订阅之后被观察者的更新动态都会通知给观察者,从而更细观察者自己的关注信息. 下面以微博为例,假设有三个程序员分别是张三.李四.王麻子,还有一个名为Java大本营的一个博主,这个博主每天会更新一些java知识…
“JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意方法和属性:这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制.”这是百度百科对JAVA反射的描述,仅凭这句话是没法明白反射的真正含义,所以还需要深入剖析.正如其描述中所讲,反射机制一般体现在运行状态,那么什么是运行状态?这就要追溯到JAVA程序的运行过程. 一.java程序的运行过程: JAVA程序运行过程分两个阶段: 1.编译阶段:将.java的源文件编译…
在动态代理中,我们知道在代理类中,执行真实对象的方法前后可以增加一些其他的逻辑,这些逻辑并不是真实对象能够实现的方法,比如一个租房的用户希望租一套公寓,但是中介所代理的这个房东并没有可以出租的公寓,那么这时候就需要在出租房屋之前进行一些其他操作了,比如中介拒绝用户的请求或者帮助找其他用户等.对这部分逻辑的实现我们可以提取成一个拦截器,就在用户租房之前先问中介有没有公寓可以出租,如果中介所代理的房东没有公寓,则中介不接受这个请求,否则接受请求并代理房东出租公寓,出租完成之后中介还可以执行其他操作.…
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755412.html 一.概述 抽象工厂模式是对工厂方法模式的再升级,但是二者面对的场景稍显差别. 工厂方法模式面对的目标一般都是单类的,就比如<Java设计模式系列-工厂方法模式>中所举的例子,目标就是桌子这一类商品. 如果是这样的呢:生产的是桌椅组合,目标的一套商品,每一套商品中的每类商品的种类的不同的,不同的组合形成不同的套装. 这种情况下,就需要使用抽象工厂模式 二.实例 我们还以家具为…
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量. 我们以类Sample为例,…
工厂模式将大量有共同接口的类实例化,工厂模式可以实现动态决定实例化哪一个类的对象,工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):添加某一种类型的产品方便,不利于产生系列产品:2)工厂方法模式(Factory Method):又称为多形性工厂:3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<…
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39760895 工厂方法模式(Factory Method) 工厂方法:顾名思义,就是调用工厂里的方法来生产对象(产品)的. 工厂方法实现方式有3种: 一.普通工厂模式.就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建. 1.uml建模图: 2.代码实现 /** * 演示样例(一):普通工厂方法 * * 缺点:假设传递的字符串出错,则不能正确创建对象 */ interface S…
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https://blog.csdn.net/LoveLion/article/details/17517213 工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式.简单工厂模式是工厂方法模式的"小弟",它不属于GoF23种设计模式,但在软件开发中应…
在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 “过程”,不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实例的细节和…
场景问题 举个生活中常见的样例--组装电脑.我们在组装电脑的时候.通常须要选择一系列的配件,比方CPU.硬盘.内存.主板.电源.机箱等. 为讨论使用简单点.仅仅考虑选择CPU和主板的问题. 其实,在选择CPU的时候,面临一系列的问题.比方品牌.型号.针脚数目.主频等问题,仅仅有把这些问题都确定下来,才干确定详细的CPU. 同样.在选择主板的时候,也有一系列问题.比方品牌.芯片组.集成芯片.总线频率等问题,也仅仅有这些都确定了.才干确定详细的主板. 选择不同的CPU和主板,是每个客户在组装电脑的时…
场景问题 举个生活中常见的例子——组装电脑,我们在组装电脑的时候,通常需要选择一系列的配件,比如CPU.硬盘.内存.主板.电源.机箱等.为讨论使用简单点,只考虑选择CPU和主板的问题. 事实上,在选择CPU的时候,面临一系列的问题,比如品牌.型号.针脚数目.主频等问题,只有把这些问题都确定下来,才能确定具体的CPU. 同样,在选择主板的时候,也有一系列问题,比如品牌.芯片组.集成芯片.总线频率等问题,也只有这些都确定了,才能确定具体的主板. 选择不同的CPU和主板,是每个客户在组装电脑的时候,向…
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!…
书接上文,简单工厂模式解决的是可以枚举种类的类的问题,但是带来了高耦合的问题,并且对类系列繁多无从下手,那么我们想起了一种方法,那就是抽象类,建一个抽象工厂,抽象工厂里的方法都是根据系列类的差异区分出来的抽象方法. 抽象工厂方法 根据WWH来学习 1,WHAT? 什么是抽象工厂模式呢?先来看看百度的解释 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况…
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单的做法就是直接new一个B出来.这么做有一个问题,假如C类和B类实现了同一个接口/继承自同一个类,系统需要把B类修改成C类,程序不得不重写A类代码.如果程序中有100个地方new了B对象,那么就要修改100处. 这就是典型的代码耦合度太高导致的"牵一发动全身".所以,有一个办法就是写一个工…
1.简单工厂模式 在不考虑扩展的情况下还是很好用的,其实我们写代码也很经常用到,其主要理解在于传入不同参数则构建不同对象,只有一个工厂,如需添加产品涉及到扩展需要修改比较多的东西,不符合开闭原则,如下例子所示,传入A则获得ABook,传入B则获得BBook: package main.java.com.learn.factory.factory; public interface Book { void getKnowledge(); } package main.java.com.learn.…
本篇开始记录实现设计模式在工作中的两种常见语言上的实现. 本篇介绍最简单的工厂模式. 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品,使用产品的人,不用在乎产品是如何生产出来的.从软件开发的角度来说,这样就有效的降低了模块之间的耦合. 使用情景: 在不确定会有多少个处理操作时应该考虑使用简单工厂模式,如针对同样的接收到的数据,处理的逻辑可能会不同,可能以后还会增加新的操作. 案例: 如果实现计算器的功能时,对于同样的输入数据,可能执行加…
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I…
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 举例说明适用场景: 假设应用系统需要多种登录方式:口令认证(通过数据库验证用户).域认证(通过微软域验证用户).建立一个支持多种登录方式的接口,见下图: 1 public interface Login { 2 //登录验证 3 public boolean verify(…
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽车品牌, 通过接口car为客户提供相应的汽车对象. Description:通过java反射机制和Properties类的结合使用,实现工厂模式.代码如下: 1.首先是entity包中的一个接口和三个实体类 汽车接口: 1 /* 2 *Description:定义汽车接口 3 * */ 4 5 6…
摘要:工厂模式是将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦.从而提高项目的扩展和维护性. 本文分享自华为云社区<[Java设计模式]用 披萨订购案例 详细讲解三种工厂模式>,作者: 我是一棵卷心菜. 一.使用传统方法 类图 步骤概括 步骤一:创建一个Pizza抽象类 public abstract class Pizza { public String name; public abstract void prepare(); public void…
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码.因为抽象工厂不太好理解,我们先看看图,然后就和代码,就比较容易理解. package com.qcf.test2; /** * 抽象工厂模式 * 为方法创建一个接口 * 为工厂类创建一个接口 * 如果再增加一辆车那就再创建一个…
第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ public interface Product { void show(); } 第二步,写两个继承了以上接口的类 package factory.extend; import factory.face.Product; public class ProductA implements Product{ @…
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说就是,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 首先举个例子:创建两个类,一个Apple,一个Banana,都有个一方法 public class Apple{ public v…
一.场景描述 仪器数据文件的格式包含Pdf.Word.Excel等多种,不同种格式的文件其数据的采集方式不同,因此定义仪器数据采集接口,并定义PDF.Excel等不同的数据采集类实现该接口. 通过工厂类,调用不同的方法,获取不同的仪器数据采集类,调用接口方法即可. 如不使用工厂模式,则需要new不同的采集类对象,使用工厂模式则隐藏了new的创建方式. 二.示例代码 仪器数据采集接口: package lims.designpatterndemo.factorydemo; public inter…
1.简单工厂模式(静态工厂方法模式) 抽象实例: public interface People { void talk(); } 具体实例: public class Doctor implements People { public void talk() { System.out.println("我是医生"); } } public class Teacher implements People { public void talk() { System.out.println…
前言 上篇博客介绍了简单工厂模式和工厂方法模式,这次介绍抽象工厂模式,抽象工厂模式和工厂方法模式的区别在于需要创建对象的复杂程度上. 抽象工厂模式 抽象工厂模式是围绕着一个超级工厂创建其他工厂.这个超级工厂被称为其他工厂的工厂,主要是为了解决接口选择问题. 举例说明: 还是继续上篇用户使用手的例子,现在生产手机的工厂发现,不同的手机使用的配件也不相同,需要单独的生产配件.例如iphonX使用的原深感摄像头,以及OLED显示屏,而iphone8使用的全新感光元件组成的摄像头,以及视网膜高清显示屏.…
抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象. 产品族 是指位于不同产品等级结构中,功能相关联的产品组成的家族.一般是位于不同的等级结构中的相同位置上.显然,每一个产品族中含有产品的数目,与产品等级结构的数目是相等的,形成一个二维的坐标系,水平坐标是产品等级结构,纵坐标是产品族.叫做相图. 当有多个不同的等级结构的产品…