[设计模式-创建型]工厂方法(Factory Method)
2013-07-17 09:17
716 查看
概括
名称 | Factory Method |
结构 | |
动机 | 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 |
适用性 | 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。 |
解析
工厂方法模式在网络上有一个形象的比喻:FACTORY METHOD—请MM去麦当劳吃汉堡,不同的MM有不同的口味,要每个都记住是一件烦人的事情,我一般采用Factory Method模式,带着MM到服务员那儿,说“要一个汉堡”,具体要什么样的汉堡呢,让MM直接跟服务员说就行了
工厂方法模式:核心工厂类不再负责所有产品的创建,而是将具体创建的工作交给子类去做,成为一个抽象工厂角色,仅负责给出具体工厂类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。
1.Product
定义工厂方法所创建的对象的接口。
2.ConcreteProduct
实现Product接口。
3.Creator
声明工厂方法,该方法返回一个Product类型的对象*
Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
可以调用工厂方法以创建一个Product对象。
4.ConcreteCreator
重定义工厂方法以返回一个ConcreteProduct实例。
实例
可能看到这里还是不是很清楚。直接看例子好了。涉及的文件有Product.java
- SoftwareProduct.java
- HardwareProduct.java
Creator.java
- HardwareCreator.java
- SoftwareCreator.java
TestMain.java
在Product 里定义了一个接口方法 doWork(), SoftwareProduct和HardwareProduct分别实现了这个方法。
Creator里定义了一个接口方法getProduct(),SoftwareCreator和HardwareCreator分别实现了这个方法得到不同的 Product.
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public interface Product { void doWork(); }
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public class SoftwareProduct implements Product { public void doWork() { System.out.println("product a Software."); } }
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public class HardwareProduct implements Product { public void doWork() { System.out.println("product a Hardware."); } }
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public class SoftwareCreator implements Creator { public Product getProduct() { return new SoftwareProduct(); } }
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public class HardwareCreator implements Creator { public Product getProduct() { return new HardwareProduct(); } }
/** * @author oscar999 * @date 2013-7-17 * @version V1.0 */ package designptn.factorymth; public class TestMain { public static void main(String[] args) { Creator softwareCreator = new SoftwareCreator(); Product softwareProduct = softwareCreator.getProduct(); softwareProduct.doWork(); Creator hardwareCreator = new HardwareCreator(); Product hardwareProduct = hardwareCreator.getProduct(); hardwareProduct.doWork(); } }
从Main 函数的调用来看, 通过不同的Creator,可以得到不同的Product, 而不需要关心具体的Product 是什么样的。
相关文章推荐
- [设计模式-创建型]工厂方法(Factory Method)
- 设计模式学习之工厂方法(Factory Method,创建型模式)(2)
- 设计模式-创建型模式#工厂方法FactoryMethod
- java设计模式之创建型模式-FactoryMethod ( 工厂方法 )
- 【设计模式】创建型模式之工厂方法Factory Method
- 设计模式杂谈:创建型模式之工厂方法(Factory Method)
- 设计模式笔记-创建型模式之三--工厂方法:Factory Method
- 设计模式-创建型模式之 Factory Method(工厂方法)
- 【设计模式基础】创建型模式 - 4 - 工厂方法(Factory Method)
- 设计模式-3.3 Factory Method(工厂方法) 对象创建型模式
- 设计模式-创建型-Factory Method(工厂方法)
- [设计模式学习笔记二][创建型模式][工厂方法(Factory Method)]
- [设计模式-创建型]工厂方法(Factory Method)
- 设计模式--创建型-FactoryMethod(工厂方法)
- C#面向对象设计模式纵横谈(四) --- Factory Method 工厂方法(创建型模式)
- 设计模式四:Factory method工厂方法——对象创建型模式
- 设计模式-创建型模式:工厂方法FactoryMethod
- 创建型模式-FactoryMethod ( 工厂方法 )
- 设计模式 工厂方法(Factory Method Pattern)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)