23种设计模式之工厂方法模式
来源:互联网 发布:朴正花网络剧 编辑:程序博客网 时间:2024/05/02 01:18
嗯嗯,我们来以女娲造人为例子吧,AbstractHumanFactory类是一个抽象类,定义了一个八卦炉具有的功能。
HumanFactory是实现类,完成创建人类的。
Human接口是人类总称。
其他三个类分别是三类人种:NvWa类是一个场景类,负责模拟这个场景。
我们定义的每个人种都有两个方法:getColor()获取人类皮肤的颜色,和talk交谈。代码如下:
人类总称:
package demo;public interface Human {//每个人的皮肤都有相应的颜色public void getColor();//人类会说话public void talk();}Human接口是对人类的总称,每个人种至少有两种方法,黑色、黄色、白色。代码分别如下:
黑色人种:
package demo;public class BlackHuman implements Human {@Overridepublic void getColor() {// TODO Auto-generated method stubSystem.out.println("黑色人种的皮肤是黑色的");}@Overridepublic void talk() {// TODO Auto-generated method stubSystem.out.println("黑人会说话,一般人听不懂呢");}}黄色人种:
package demo;public class YellowHuman implements Human {@Overridepublic void getColor() {// TODO Auto-generated method stubSystem.out.println("黄色人种的皮肤是黄色的");}@Overridepublic void talk() {// TODO Auto-generated method stubSystem.out.println("黄色人种会说话,一般人说的是双字");}}白色人种:
package demo;public class WhiteHuman implements Human {@Overridepublic void getColor() {// TODO Auto-generated method stubSystem.out.println("白色人种的皮肤是白色的");}@Overridepublic void talk() {// TODO Auto-generated method stubSystem.out.println("白色人种会说话,一般都说单字");}}
所有人种定义完毕,下一步就是定义一个八卦炉,然后造人。想象一下,女娲能给八卦炉下达什么命令呢?应该是给我产生出一个黄人,而不是给我产生一个会走会跑会说话的黄色人种。因为这样的命令增加了交流的成本。作为一个生产的管理者,只要知道产生什么就可以了,而不需要事务的具体信息。通过分析我们发现八卦炉生产人类的方法输入参数类型应该是Human接口的实现类,代码如下:
package demo;public abstract class AbstractHumanFactory {public abstract <T extends Human> T createHuman(Class<T> c);}我们这里采用了泛型,通过泛型对createHuman的输入参数产生两层的限制:
1必须是class类型;
2必须是Human的实现类;
目前女娲只有一个八卦炉,其实现产生人类的方法,代码如下:
package demo;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 e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return (T)human;}}人种有了,八卦炉有了,剩下的工作就是女娲采集黄土,下达命令八卦炉开始生产,代码如下:
女娲类
package demo;public class NvWa {public static void main (String[] agrs){//声明阴阳八卦炉AbstractHumanFactory yinyang = new HumanFactory();//女娲造人火候不足,产生了白人Human whiteHuman = yinyang.createHuman(WhiteHuman.class);whiteHuman.getColor();whiteHuman.talk();//火候过足,产生了黑人Human blackHuman = yinyang.createHuman(BlackHuman.class);blackHuman.getColor();blackHuman.talk();//火候刚刚好,产生了黄人Human yellowHuman = yinyang.createHuman(YellowHuman.class);yellowHuman.getColor();yellowHuman.talk();}}运行结果如下:
白色人种的皮肤是白色的白色人种会说话,一般都说单字黑色人种的皮肤是黑色的黑人会说话,一般人听不懂呢黄色人种的皮肤是黄色的黄色人种会说话,一般人说的是双字
人类生产出来了,以上就是工厂方法模式。
0 0
- 23种设计模式之工厂方法
- 23种设计模式学习之东拼西凑-------工厂方法模式
- 精通23种设计模式之工厂方法模式
- 23种设计模式之工厂方法模式
- 23种设计模式之——工厂方法模式
- 23种设计模式之工厂方法模式
- 23种设计模式之【工厂方法模式】
- 23种设计模式之工厂方法模式
- 23种设计模式C++实例之工厂方法模式
- 23种设计模式之——工厂方法模式
- 23种设计模式之工厂方法模式
- 23种设计模式之工厂方法模式
- 23种设计模式之——工厂方法模式
- Java 23种设计模式之工厂方法模式
- 23种设计模式--工厂方法模式
- 23种设计模式之工厂模式
- 23种设计模式之-工厂模式
- 23种设计模式之工厂模式
- 得分(Score, ACM/ICPC Seoul 2005, UVa 1585)
- linux常用命令大全(转)
- 解决 SharePoint 2013 An update conflict has occurred, and you must re-try this action
- highcharts 使用
- WCF广州本田整车销售系统技术解析(六) 三个下拉框之间的级联关系实现
- 23种设计模式之工厂方法模式
- 继承和多态,主要为虚函数,虚函数是多态的一种
- OC-----属性及点语法
- 棋盘型动态规划-codevs-1219骑士游历
- Oracle UPDATE 语句
- 函数对象
- MATLAB中如何直接曲线拟合,而不使用cftool的GUI界面
- mysql重连的问题
- javascript中的继承特性