`

二十二:工厂方法模式

阅读更多
工厂方法模式是类的创建模式,它的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中,它仅仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这个细节.

二:优化简单工厂模式中的"农场"系统
现在把这个农场的管理变得更加专业化:苹果由"苹果园丁"负责,葡萄由"葡萄园丁"负责,草莓由"草莓园丁"负责,这三个"园丁"都是实现了抽象的"水果园丁"接口的具体工厂类,而"水果园丁"则扮演抽象工厂的角色.源代码如下:
package cai.milenfan.basic.test; 
public interface Friut { 
public void plant(); 
public void grow(); 
public void harvest(); 
public String getFriutName(); 
public void setFriutName(String friutName); 
} 

package cai.milenfan.basic.test; 
public class Apple implements Friut{ 
private String friutName = ""; 
public void grow() { 
System.out.println(this.friutName " is growing......,AA"); 
} 
public void harvest() { 
} 
public void plant() { 
} 
public String getFriutName() { 
return friutName; 
} 
public void setFriutName(String friutName) { 
this.friutName = friutName; 
} 
} 



package cai.milenfan.basic.test; 
public class Strawberry implements Friut{ 
private String friutName=""; 
public void grow() { 
System.out.println(this.friutName " is growing......,BB"); 
} 
public void harvest() { 
} 
public void plant() { 
} 
public String getFriutName() { 
return null; 
} 
public void setFriutName(String friutName) { 
this.friutName = friutName; 
} 
} 



package cai.milenfan.basic.test; 

public class Grape implements Friut{ 
private String friutName=""; 
public void grow() { 
System.out.println(this.friutName "is growing......"); 
} 
public void harvest() { 
} 
public void plant() { 
} 
public String getFriutName() { 
return null; 
} 
public void setFriutName(String friutName) { 
this.friutName = friutName; 
} 
} 


package cai.milenfan.basic.test; 

//水果园丁
public interface FriutGardener { 
//工厂方法
public Friut factory(); 
} 


package cai.milenfan.basic.test; 

public class AppleGardener implements FriutGardener{ 
public Friut factory(){ 
return new Apple(); 
} 
} 



package cai.milenfan.basic.test; 

public class GrapeGardener implements FriutGardener{ 

public Friut factory() { 
return new Grape(); 
} 
} 



package cai.milenfan.basic.test; 

public class StrawberryGardener implements FriutGardener{ 
public Friut factory() { 
return new Strawberry(); 
} 
} 



package cai.milenfan.basic.test; 

public class TestFarm { 
public static void main(String[] args){ 
FriutGardener appleGardener = new AppleGardener(); 
Friut apple = appleGardener.factory(); 
apple.setFriutName("Apple"); 
apple.grow(); 

FriutGardener strawberryGardener = new StrawberryGardener(); 
Friut strawberry = strawberryGardener.factory();
strawberry.setFriutName("Strawberry"); 
strawberry.grow(); 
} 
} 



抽象工厂角色和抽象产品角色都可以选择由java接口或者java抽象类来实现.

三:Java语言中工厂方法模式的例子
A:聚集中的应用
多个对象聚在一起形成的总体称之为聚集,聚集对象是能够包容一组对象的容器对象。所有的Java聚集都实现了java.util.Collection接口,这个接口规定所胡的java聚集必须提供一个iterator方法,返回一个Iterator类型的对象,一个个体的Java聚集对象会通过这个iterator方法返回一个具体的Iterator类,可以看出,这个iterator方法就是一个工厂方法.
B:URL和URLConnection
URL对象提供一个openConnection的工厂方法返回一个URLConnection类型的对象,由于URLConnection是一个抽象类,因此返回的不可能是这个抽象类的实例,而必然是其具体子类的实例,这就应用了工厂方法。 。

四:工厂方法模式与其他模式的关系
A:模板方法模式
工厂方法模式和模板方法模式常常一起使用,工厂方法模式将创建工作推迟到子类,模板方法将剩余逻辑交给子类。
.........
分享到:
评论

相关推荐

    Head First 设计模式 JAVA源码

    第二讲:工厂方法模式 第三讲:抽象工厂模式 第四讲:工厂模式在开发中的运用 第五讲:单例模式 第六讲:原型模式 第七讲:建造者模式 第八讲:装饰模式 第九讲:策略模式 第十讲:观察者模式 第十一讲:享...

    软件体系结构与设计模式第十二章工厂方法模式.pptx

    软件体系结构与设计模式第十二章工厂方法模式 工厂方法模式是一种常用的设计模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。这种模式的主要作用是...

    23种设计模式项目实例

    创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:...

    二十三种设计模式Java版之工厂模式

    在Java中,工厂模式主要有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。每种模式都有其特定的应用场景和优势。 1. **简单工厂模式**: - 它是工厂模式的最基础形式,通过一个静态方法创建对象,客户只...

    01-制造工具的工厂模式(1).html

    工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ) 建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( ...

    二十二种设计模式.pdf

    三、工厂方法模式 四、建造者模式 五、适配器模式 六、桥接模式 七、组合模式 八、装饰器模式 九、外观模式 十、享元模式 十一、代理模式 十二、命令模式 十三、责任链模式 十四、解释器模式 十五、迭代器模式 十六...

    软件体系结构与设计模式 第十二章 工厂方法模式.pptx

    软件体系结构与设计模式 第十二章 工厂方法模式.pptx

    二十三种设计模式迷你手册

    - 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而无需指定它们的具体类。 - 建造者模式:将复杂对象的构建与它的表示...

    二十三种设计模式通俗理解

    ### 二十三种设计模式通俗理解 #### 1. FACTORY (工厂模式) 工厂模式是一种常用的软件设计模式,它的核心思想在于将实例化的责任交给一个专门的类——工厂类。这样做的好处是用户无需了解创建对象的具体过程,只...

    09-通过容器实现的外观模式(2).html

    工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ) 建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( ...

    00-初探 Laravel 和其中的设计模式(3).html

    工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ) 建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( ...

    12-附录 1 设计模式的七大原则(1).html

    工厂方法模式( Factory Method ) 抽象工厂模式( Abstract Factory ) 单例模式( Singleton ) 建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( ...

    java二十二种设计模式pdf完整版最新版本

    3. 工厂方法模式 4. 建造者模式 5. 适配器模式 6. 桥接模式 7. 组合模式 8. 装饰器模式 9. 外观模式 10. 享元模式 11. 代理模式 12. 命令模式 13. 责任链模式 14. 解释器模式 15. 迭代器模式 16. 备忘录模式 17. ...

    二十三种设计模式手册

    1. **工厂方法模式**:这是最简单和最常用的创建型设计模式之一。工厂方法将对象的创建过程封装起来,使得代码可以使用一个公共接口来创建对象,而不必知道具体创建的是哪个类的实例。这提高了代码的灵活性和可扩展...

    java之 抽象工厂模式(abstract factory)

    `JavaApplication3`可能是主程序,它使用抽象工厂模式来创建不同市场的水果和蔬菜实例,并调用相应的方法进行操作。 在实际应用中,这种模式可以很好地扩展,比如添加新的市场或新产品类型,只需创建新的具体工厂和...

    Java二十三种设计模式

    2. **工厂方法模式(Factory Method)**:定义了一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 3. **抽象工厂模式(Abstract Factory)**:提供一个接口用于创建一...

    二十三種設計模式Gof

    22. **模板方法模式**:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 23. **访问者模式**:访问者模式表示一个作用于某...

    二十四种设计模式全实现_含图解

    24. **模板方法模式**:模板方法模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 以上24种设计模式在软件开发中有着广泛的应用,...

    设计模式PPT.rar

    01第一讲简单工厂模式 02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 ...

Global site tag (gtag.js) - Google Analytics