[设计模式-创建型]工厂方法(Factory Method)
来源:互联网 发布:水利学什么软件 编辑:程序博客网 时间:2024/06/05 15:59
概括
名称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
- [设计模式-创建型]工厂方法(Factory Method)
- Factory Method工厂方法(创建型模式)
- Factory Method工厂方法(创建型模式)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(24):创建型-工厂模式【工厂方法模式】(Factory Method)
- JAVA设计模式(01_1):创建型-工厂模式【工厂方法模式】(Factory Method)
- (2)设计模式之--创建型模式---工厂方法模式Factory Method
- 设计模式学习(创建型模式)—工厂方法模式(Factory Method)
- 设计模式学习笔记--工厂方法模式(Factory Method Pattern)【创建型模式】
- 设计模式-工厂方法模式(factory method)
- 设计模式-工厂方法模式(Factory Method)
- 【设计模式】-工厂方法模式-Factory Method
- 设计模式 工厂方法模式 factory method
- 设计模式 工厂方法模式 Factory Method
- 设计模式笔记-创建型模式之三--工厂方法:Factory Method
- Tiled convolutional neural networks(TCNN)
- 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现(转载)
- 倍压整流电路原理及仿真
- 结构体的使用和动态内存的分配及释放
- C++中的空类,默认产生哪些类成员函数
- [设计模式-创建型]工厂方法(Factory Method)
- BZOJ 1191 [HNOI2006] 超级英雄 Hero 题解与分析
- memmove函数
- Java笔记(例1:蛇形填数) 边走边聊
- 辛苦的 20130714 public change
- 【Android小范例教程】【3】图片搜索器
- 面试时被问到的技术方面的问题
- 写作与才情无关——leo鉴书(28)
- SQLSERVER R2存储过程调用webservices