`

二十二:工厂方法模式

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

二:优化简单工厂模式中的"农场"系统
现在把这个农场的管理变得更加专业化:苹果由"苹果园丁"负责,葡萄由"葡萄园丁"负责,草莓由"草莓园丁"负责,这三个"园丁"都是实现了抽象的"水果园丁"接口的具体工厂类,而"水果园丁"则扮演抽象工厂的角色.源代码如下:
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

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

    23种设计模式项目实例

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

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

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

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

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

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

    二十三种设计模式Java版之工厂模式 工厂模式博文地址:https://blog.csdn.net/program_highway/article/details/124561033

    设计模式 C# 简单工厂模式,实现代码

    设计模式 C# 简单工厂模式,又叫做静态工厂方法模式,这是一个很简单的模式,它不属于GOF二十三个基本模式之中的一个,但它是一个很有用的模式,有用得着的时候可以使用它。

    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 ) 装饰器模式( ...

    设计模式PPT.rar

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

    设计模式-7种开发语言(C#、JAVA、JavaScript、C++、Python、Go、PHP).pdf

    第三节 工厂方法模式 第四节 抽象工厂模式 第五节 单例模式 第六节 外观模式 第七节 模板模式 第八节 组合模式 第九节 代理模式 第十节 命令模式 第十一节 观察者模式 第十二节 策略模式 第十三节 建造者模式 第十四...

    03-查询语句建造器(1).html

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

    07-使用代理快速接入第三方库(1).html

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

    05-容易被忽略的迭代器(1).html

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

    06-让观察者监听事件(1).html

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

    04-通过策略选择驱动(1).html

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

    11-回顾和总结(1).html

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

    02-控制反转和服务容器(1).html

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

    08-责任链和管道的协作(1).html

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

Global site tag (gtag.js) - Google Analytics