描述:女娲造人是个很经典的工厂方法模式的例子,女娲造出来的人分为白种人,黑种人及黄种人,暂时不考虑性别,语言分别分为英语,拉丁语和汉语。那么,这里我们将造人的仓库就作为生产工厂,不同肤色的人为产品。女娲造人的仓库具体的实现由仓库的子类(造人仓库)去实现
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、女娲造人结果:我是黄种人! 我的语言是汉语! 我是白种人! 我的语言是英语! 我是黑种人! 我的语言拉丁文语!