Java工厂模式详解

Java工厂模式详解

ID:40297803

大小:114.50 KB

页数:13页

时间:2019-07-30

Java工厂模式详解_第1页
Java工厂模式详解_第2页
Java工厂模式详解_第3页
Java工厂模式详解_第4页
Java工厂模式详解_第5页
资源描述:

《Java工厂模式详解》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、工厂模式1.简单工厂模式(SimpleFactory)从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactoryMethod)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。该模式中包含的角色及其职责:  (1)工厂(Creator)角色:简单工厂模式的核心,

2、它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。  (2)抽象产品(Product)角色:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。  (3)具体产品(ConcreteProduct)角色:是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。使用场景:工厂类负责创建的对象比较少;客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。应用举例:对于一个典型的Java应用而言,应用之中各实例

3、之间存在复杂的调用关系(Spring把这种调用关系成为依赖关系,例如A实例调用B实例来的方法,则成为A依赖与B)。当A对象需要调用B对象的方法是,许多初学者会选择使用new关键字来创建一个B实例,然后调用B实例的方法。从语法角度来看,这种做法没有任何问题,这种做法的坏处在于:A类的方法实现直接调用了B类的类名(这种方式也被称为硬编码耦合),一旦系统需要重构;需要使用C类来代替B类时,程序不得不写A类代码。如果应用中有100个或10000个类以硬编码耦合了B类,则需要重新改写100个,10000个地方…..换一个角度来看这个问题:对于A对象而言,它只需

4、要调用B对象的方法,并不关心B对象的实现、创建过程。考虑让B类实现一个IB接口,而A类只需要IB接口耦合——A类并不直接使用new关键字来创建B实例,而是重新定义一个工厂类:IBFactory,由该工厂类来负责创建IB实例;而A类通过IBFactory工厂的方法得到IB的实例。通过该用上面设计,则A类需要与IBFactory耦合,和需要与IB接口耦合,如果系统需要重构:需要使用C类代替B类,则只需要让C类实现IB接口,并改写IBFactory工厂中创建IB实例的实现代码,并让该工厂产生C(实现IB接口)实例即可、由于所以来IB实例的对象都是通过工厂来

5、获取IB实例的,所以他们都将改为获得C类实例,这就完成了系统重构。示例:Output接口publicinterfaceOutput{publicfinalstaticIntegerMAX_CACHE_LINE=3;voidgetData(Stringstr);voidout();}Pinter类实现Output接口publicclassPrinterimplementsOutput{privateString[]printData=newString[MAX_CACHE_LINE];//用以记录当前需打印的作业数privateintdataNum=0

6、;@OverridepublicvoidgetData(Stringstr){if(dataNum>=MAX_CACHE_LINE){System.out.println("输出队列一满,添加失败");}else{printData[dataNum++]=str;}}@Overridepublicvoidout(){while(dataNum>0){System.out.println("打印机打印:"+printData[0]);//把作业整体前移一位,并将剩下的作业数减一System.arraycopy(printData,1,printData

7、,0,--dataNum);}}}工厂类,返回实现了Output接口的Printer的实例publicclassOutputFactory{publicOutputgetOutput(){returnnewPrinter();}}Computer类对接口Output形成依赖,将Computer与Printer实现类分离开来publicclassComputer{privateOutputout;publicComputer(Outputout){this.out=out;}publicvoidkeyIn(Stringstr){out.getData(

8、str);}publicvoidprint(){out.out();}publicstaticvoidmai

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。