设计模式之工厂方法
2017-05-06 15:46
169 查看
描述:女娲造人是个很经典的工厂方法模式的例子,女娲造出来的人分为白种人,黑种人及黄种人,暂时不考虑性别,语言分别分为英语,拉丁语和汉语。那么,这里我们将造人的仓库就作为生产工厂,不同肤色的人为产品。女娲造人的仓库具体的实现由仓库的子类(造人仓库)去实现
UML模型如下所示:
具体代码:
1、产品的抽象接口
2、产品的具体实现,女娲要造的三种肤色,黄种人,白种人和黑种人
3、工厂的抽象类
4、具体造人的工厂类
5、女娲开始测试造人
6、女娲造人结果:
我是黄种人!
我的语言是汉语!
我是白种人!
我的语言是英语!
我是黑种人!
我的语言拉丁文语!
UML模型如下所示:
具体代码:
1、产品的抽象接口
package com.java.factorymethod; public interface Human { public void color(); public void talk(); } package com.java.factorymethod; public interface Human { public void color(); public void talk(); }
2、产品的具体实现,女娲要造的三种肤色,黄种人,白种人和黑种人
package com.java.factorymethod; public class BlackHuman implements Human { @Override public void color() { System.out.println("我是黑种人!"); } @Override public void talk() { System.out.println("我的语言拉丁文语!"); } }
package com.java.factorymethod; public class WhiteHuman implements Human { @Override public void color() { System.out.println("我是白种人!"); } @Override public void talk() { System.out.println("我的语言是英语!"); } }
package com.java.factorymethod; public class YellowHuman implements Human { @Override public void color() { System.out.println("我是黄种人!"); } @Override public void talk() { System.out.println("我的语言是汉语!"); } }
3、工厂的抽象类
package com.java.factorymethod; public abstract class AbstractHumanFactory { public abstract <T extends Object> T createHuman(Class<T> obj); }
4、具体造人的工厂类
package com.java.factorymethod; public class HumanFactory extends AbstractHumanFactory { @SuppressWarnings("unchecked") @Override public <T> T createHuman(Class<T> obj) { T human = null; try { human = (T)Class.forName(obj.getName()).newInstance(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } return human; } }
5、女娲开始测试造人
package com.java.factorymethod; public class FactoryMethodTest { public static void main(String[] args) { AbstractHumanFactory factory = new HumanFactory(); //黄种人 Human yellow = (YellowHuman)factory.createHuman(YellowHuman.class); yellow.color(); yellow.talk(); //白种人 Human white = (WhiteHuman)factory.createHuman(WhiteHuman.class); white.color(); white.talk(); //黑种人 Human black = (BlackHuman)factory.createHuman(BlackHuman.class); black.color(); black.talk(); } }
6、女娲造人结果:
我是黄种人!
我的语言是汉语!
我是白种人!
我的语言是英语!
我是黑种人!
我的语言拉丁文语!
相关文章推荐
- GoF 23个经典的设计模式03--创建模式之工厂方法(未完代续)
- 设计模式--工厂方法
- 设计模式(三)、FACTORY METHOD(工厂方法)---对象创建型模式
- 设计模式学习笔记四:工厂方法(Factory Method)
- 每周一个设计模式之工厂方法与抽象工厂
- 设计模式之Factory1(简单工厂,工厂方法,抽象工厂的比较)
- 设计模式之工厂方法
- 设计模式 之 工厂方法
- C# 设计模式 之 工厂方法
- 设计模式(1)工厂方法 感觉没必要用工厂方法
- 设计模式杂谈:创建型模式之工厂方法(Factory Method)
- 设计模式--创建模式--工厂方法
- 设计模式示例一 Factory Method(工厂方法)
- 设计模式--工厂方法
- JAVA设计模式——工厂方法(Factory Method)模式
- 第二个设计模式:工厂方法
- 设计模式示例一 Factory Method(工厂方法)
- 设计模式 之 工厂方法
- 我把Black_Cat与Walaqi等关于"设计模式"之"工厂方法""抽象工厂"的讨论整理如下,以方
- 设计模式之工厂方法(FACTORY METHOD))(二)