工厂方法模式
来源:互联网 发布:淘宝四川百灵鸟笼子 编辑:程序博客网 时间:2024/04/29 18:31
1.定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2.通用类图
工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义;Creator为抽象创建类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的。
3.举例
女娲造人的例子,女娲可以看成是一个场景类。Human接口看成是产品,而下面的三个实现类则可以看成是具体的产品。AbstractHumanFactory看成是Creator,HumanFactory看成是具体的Creator。类图如下:
Human接口代码如下:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:28:14* 类说明*/public interface Human {public void getColor();public void talk();}BlackHuman代码:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:36:48* 类说明*/public class BlackHuman implements Human {@Overridepublic void getColor() {System.out.println("我的皮肤是黑色的");}@Overridepublic void talk() {System.out.println("黑人的话别人听不懂");}}WhiteHuman:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:38:59* 类说明*/public class WhiteHuman implements Human {@Overridepublic void getColor() {System.out.println("我的皮肤是白色的");}@Overridepublic void talk() {System.out.println("我会说英语");}}YellowHuman:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:40:04* 类说明*/public class YellowHuman implements Human {@Overridepublic void getColor() {System.out.println("我的皮肤是黄色的");}@Overridepublic void talk() {System.out.println("我说的是汉语");}}AbstractHumanFactory:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:41:45* 类说明*/public abstract class AbstractHumanFactory {public abstract <T extends Human> T createHuman(Class<T> c);}HumanFactory:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:54:50* 类说明*/public class HumanFactory extends AbstractHumanFactory {@Overridepublic <T extends Human> T createHuman(Class<T> c) {Human human = null;try {human = (Human) Class.forName(c.getName()).newInstance();} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {System.out.println("创建人种产生错误");}return (T) human;}}女娲类(模拟场景类)NvWa:
package com.cqu.factory_method; /*** @author 作者:MaJie E-mail:majiecqu@126.com* @version 创建时间:2017年3月14日 下午3:57:57* 类说明*/public class NvWa {public static void main(String[] args) {AbstractHumanFactory factory = new HumanFactory();System.out.println("创建白人:");Human whiteHuman = factory.createHuman(WhiteHuman.class);whiteHuman.getColor();whiteHuman.talk();System.out.println();System.out.println("创建黑人");Human blackHuman = factory.createHuman(BlackHuman.class);blackHuman.getColor();blackHuman.talk();System.out.println();System.out.println("创建黄人");Human yellowHuman = factory.createHuman(YellowHuman.class);yellowHuman.getColor();yellowHuman.talk();}}执行结果:
创建白人:我的皮肤是白色的我会说英语创建黑人我的皮肤是黑色的黑人的话别人听不懂创建黄人我的皮肤是黄色的我说的是汉语*注:该工厂方法模式为看秦小波著《设计模式之禅》总结,详情请看该书工厂方法模式一章。
1 0
- 工厂模式 -- 工厂方法
- 工厂模式-工厂方法
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式-工厂方法模式
- 工厂模式---工厂方法模式
- 【模式】工厂方法模式
- 工厂方法,抽象工厂模式
- C#工厂模式-工厂方法
- 工厂模式 和工厂方法
- 工厂模式-C-工厂方法
- 工厂模式以及工厂方法
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂方法、抽象工厂模式
- 工厂模式(简单工厂、工厂方法)
- 简单工厂|工厂方法|抽象工厂模式
- 设计模式-工厂模式(简单工厂模式+工厂方法模式)
- iOS 面向对象编程的三大特征
- 输入输出流
- Is Subsequence
- HashMap源码分析(下)--Android篇
- 洛谷 1508——Likecloud-吃、吃、吃(多维动态规划)
- 工厂方法模式
- 【重大漏洞预警】Struts2 远程代码执行漏洞 S2-045 原理初步分析
- oc——类——体系结构
- Java笔记之一
- c++第二次作业报告2.0(2个实验)
- A water problem 常数优化的故事。。
- 后缀自动机总结
- c++ 文件的处理
- c++动态内存分配(new/new[]和delete/delete[])