工厂方法模式(Factory Method Pattern)应用篇(直接使用工厂方法)
2012-11-18 00:08
295 查看
一、什么是多态工厂模式
多态工厂模式属于类的创建型模式,它又被称为工厂方法模式(Factory
Method Pattern) 。 多态工厂模式 的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、模式中包含的角色及其职责
1.抽象工厂(Creator)角色: (比如示例1中的FruitFactory.java) 工厂方法模式的核心,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator):角色 (比如 示例1中的PearFactory.java) 具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
3.抽象(Product)角色 :(比如示例1中的Fruit.java)工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色: (比如示例1中的Apple.java, Banana.java, Pear.java)工厂方法模式所创建的具体实例对象
三、 多态工厂模式 和简单工厂模式比较
多态工厂模式与简单工厂模式在结构上的不同不是很明显。 多态工厂模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。
四、多态使用实例
在工厂方法模式里面,应该是Creator中的其它方法在使用工厂方法创建的对象,虽然也可以把工厂方法创建的对象直接提供给Creator外部使用,但工厂方法模式的本意,是由Creator对象内部的方法来使用工厂方法创建的对象,也就是说,工厂方法一般不提供给Creator外部使用。
客户端应该是使用Creator对象,或者是使用由Creator创建出来的对象。对于客户端使用Creator对象,这个时候工厂方法创建的对象,是Creator中的某些方法使用。对于使用那些由Creator创建出来的对象,这个时候工厂方法创建的对象,是构成客户端需要的对象的一部分。
工厂方法一般不提供给Creator外部使用,但是有时我们的确需要这么做。下面将举例来说明。
示例1
Fruit.java文件
Apple.java文件
Banana.java文件
Pear.java文件
FruitFactory.java
AppleFactory.java文件
BananaFactory.java文件
PearFactory.java文件
MainClass.java文件
多态工厂模式属于类的创建型模式,它又被称为工厂方法模式(Factory
Method Pattern) 。 多态工厂模式 的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、模式中包含的角色及其职责
1.抽象工厂(Creator)角色: (比如示例1中的FruitFactory.java) 工厂方法模式的核心,任何工厂类都必须实现这个接口。
2.具体工厂( Concrete Creator):角色 (比如 示例1中的PearFactory.java) 具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
3.抽象(Product)角色 :(比如示例1中的Fruit.java)工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
4.具体产品(Concrete Product)角色: (比如示例1中的Apple.java, Banana.java, Pear.java)工厂方法模式所创建的具体实例对象
三、 多态工厂模式 和简单工厂模式比较
多态工厂模式与简单工厂模式在结构上的不同不是很明显。 多态工厂模式的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。 当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了“开放-封闭”原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。工厂方法模式退化后可以演变成简单工厂模式。
四、多态使用实例
在工厂方法模式里面,应该是Creator中的其它方法在使用工厂方法创建的对象,虽然也可以把工厂方法创建的对象直接提供给Creator外部使用,但工厂方法模式的本意,是由Creator对象内部的方法来使用工厂方法创建的对象,也就是说,工厂方法一般不提供给Creator外部使用。
客户端应该是使用Creator对象,或者是使用由Creator创建出来的对象。对于客户端使用Creator对象,这个时候工厂方法创建的对象,是Creator中的某些方法使用。对于使用那些由Creator创建出来的对象,这个时候工厂方法创建的对象,是构成客户端需要的对象的一部分。
工厂方法一般不提供给Creator外部使用,但是有时我们的确需要这么做。下面将举例来说明。
示例1
Fruit.java文件
public interface Fruit { /* * 采集 */ public void get(); }
Apple.java文件
public class Apple implements Fruit{ /* * 采集 */ public void get(){ System.out.println("采集苹果"); } }
Banana.java文件
public interface FruitFactory { public Fruit getFruit(); }
Pear.java文件
public class Pear implements Fruit { public void get() { System.out.println("采集梨子"); } }
FruitFactory.java
public interface FruitFactory { public Fruit getFruit(); }
AppleFactory.java文件
public class AppleFactory implements FruitFactory { public Fruit getFruit() { return new Apple(); } }
BananaFactory.java文件
public class BananaFactory implements FruitFactory { public Fruit getFruit() { return new Banana(); } }
PearFactory.java文件
public class PearFactory implements FruitFactory { public Fruit getFruit() { return new Pear(); } }
MainClass.java文件
public class MainClass { public static void main(String[] args) { //获得AppleFactory FruitFactory ff = new AppleFactory(); //通过AppleFactory来获得Apple实例对象 Fruit apple = ff.getFruit(); apple.get(); //获得BananaFactory FruitFactory ff2 = new BananaFactory(); Fruit banana = ff2.getFruit(); banana.get(); //获得PearFactory FruitFactory ff3 = new PearFactory(); Fruit pear = ff3.getFruit();
相关文章推荐
- 工厂方法模式-Factory Method Pattern 工厂三兄弟之工厂方法模式(二):工厂方法模式概述
- 工厂方法模式-Factory Method Pattern 工厂三兄弟之工厂方法模式(四):重载的工厂方法,工厂方法的隐藏,工厂方法模式总结
- 工厂方法模式-Factory Method Pattern 工厂三兄弟之工厂方法模式(一):日志记录器的设计
- 设计模式拾荒之工厂方法模式(Factory Method Pattern): 简单工厂并不是一种设计模式
- 工厂方法模式(Factory Method Pattern) 应用篇(上)
- 工厂模式(Factory Pattern)之简单工厂,工厂方法模式(Factory Method Pattern),抽象工厂模式(Abstract Factory Pattern)
- Java Concurrency - ThreadFactory, 使用工厂方法创建线程
- 如何在ActionScript 3.0里使用工厂模式和模板方法模式(Factory and Template Method Patterns)
- 工厂方法模式(Factory Method Pattern) 应用篇(下)
- 工厂方法模式-Factory Method Pattern 工厂三兄弟之工厂方法模式(三):日志记录器的工厂方法模式解决方案,反射与配置文件
- 工厂方法模式(Factory Method Pattern) 应用篇(上)
- 厂方法模式(Factory Method Pattern) 应用篇(下)
- iOS经常使用设计模式——工厂方法(简单工厂模式,工厂方法模式, 抽象工厂模式)
- 六个创建型模式2:工厂方法模式-Factory Method Pattern 【学习难度:★★☆☆☆,使用频率:★★★★★】
- Ajax前台返回JSON数据后再Controller中直接转换成类型使用,后台接收json转成实体的方法
- Factory Method Pattern — 工厂方法模式
- MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适
- 工厂方法模式(Factory Method Pattern)
- 工厂方法(Factory Method)之追根究底
- Linux使用cp命令直接覆盖不提示的方法