工厂方法(Factory Method)模式.docx

工厂方法(Factory Method)模式.docx

ID:52440768

大小:41.06 KB

页数:8页

时间:2020-03-27

工厂方法(Factory Method)模式.docx_第1页
工厂方法(Factory Method)模式.docx_第2页
工厂方法(Factory Method)模式.docx_第3页
工厂方法(Factory Method)模式.docx_第4页
工厂方法(Factory Method)模式.docx_第5页
资源描述:

《工厂方法(Factory Method)模式.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.2 工厂方法(FactoryMethod)模式    工厂方法模式是类的创建模式,又叫虚拟构造子(VirtualConstructor)模式或者多态性工厂(PolymorphicFactory)模式。   工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际工作推迟到子类中。 1.2.1 工厂方法模式的引进   工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。下面是工厂方法模式的缩略类图:    在工厂方法模式中,核心的工厂类不再负责所有产品

2、的创建,而是将具体创建的工作交给子类去做。这个核心工厂则变为抽象工厂角色,仅负责给出具工厂子类必须实现的接口,而不接触哪一产品创建的细节。   这种抽象的结果,使这种工厂方法模式可以用来允许系统不修改具体工厂角色的情况下引进新产品,这一特点无疑使得工厂模式具有超过简单工厂模式的优越性。 1.2.2 工厂方法模式的结构   在工厂方法模式中,一般都有一个平行的等级结构,也就是说工厂和产品是对应的的。抽象工厂对应抽象产品,具体工厂对应具体产品。简单的示意图如下:    从上图可以看出,工厂方法模式的系统涉及到了以下角色:   抽

3、象工厂角色:与应用程序无关,任何在模式中创建对象的工厂必须实现这个接口。   具体工厂角色:实现了抽象工厂接口的具体Java类,含有与引用密切相关的逻辑,并且受到应用程序的调用以创建产品对象。   抽象产品角色:工厂方法所创建产品对象的超类型,也就是产品对象的共同父类或共同拥有的接口。   具体产品角色:这个角色实现了抽象产品角色所声名的接口。工厂方法所创建的每个具体产品对象都是某个具体产品角色的实例。 1.2.3 工厂方法模式在农场系统中的实现 1.2.3.1 背景   在简单工厂模式中,有个全能的园丁,控制所有作物的种植

4、、生长和收获。现在农场规模变大了,管理更加专业化了。过去全能的园丁没有了,每一种作物都有专门的园丁管理,形成了规模化和专业化生产。 1.2.3.2 系统设计机构图 1.2.3.3 实现源码 1.2.3.3.1 水果产品接口Fruit.javapackagecom.lavasoft.patterns.factorymethod.ybms;/** *工厂模式--工厂方法模式--一般性模式(农场应用) *ReadMe: 水果接口 */publicinterfaceFruit{   /**    *种植    */   voidpl

5、ant();   /**    *生长    */   voidgrow();   /**    *收获    */   voidharvest();} 1.2.3.3.2 具体产品苹果Apple.javapackagecom.lavasoft.patterns.factorymethod.ybms;/***工厂模式--工厂方法模式--一般性模式(农场应用) *ReadMe: 水果工厂的产品:苹果 */publicclassAppleimplementsFruit{   privateinttreeAge;   /**   

6、 *种植    */   publicvoidplant(){       System.out.println("Applehasbeenplanted.");   }   /**    *生长    */   publicvoidgrow(){       System.out.println("Appleisgrowing...");   }   /**    *收获    */   publicvoidharvest(){       System.out.println("Applehasbeenharvested

7、.");   }   /**    *@return返回树龄    */   publicintgetTreeAge(){       returntreeAge;   }   /**    *设置树龄    */   publicvoidsetTreeAge(inttreeAge){       this.treeAge=treeAge;   }}1.2.3.3.3 具体产品葡萄:Grape.javapackagecom.lavasoft.patterns.factorymethod.ybms;/** *工厂模式--工厂方

8、法模式--一般性模式(农场应用) *ReadMe: 水果工厂的产品:葡萄 */publicclassGrapeimplementsFruit{   privatebooleanseedless;  //是否有籽   /**    *种植    */   publicvoidplant(){

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

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

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