个人blog 此篇博文地址:http://www.sanyinchenblog.com/?p=244
工厂模式:
定义一个抽象工厂接口,让子类去决定要实例化哪一个类。
demo(https://github.com/sanyinchen/UMLDemo)
书中举了一个女娲造人的例子,女娲有一个八卦炉,然后要通过这个八卦炉烧纸三种肤色的人,分别是白种人,黑种人,和黄种人。
我们来看一下UML视图:
Nv在这里是一个场景类。
我们现在主要来看一下场景类和抽象工厂类:
NV:
public class NvWa { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("女娲造黄种人"); HumanFactory factory = new HumanFactory(); Human human = factory.creatHuman(YellowHUman.class); human.getColor(); human.talK(); System.out.println("女娲造黑种人"); human = factory.creatHuman(BlackHUman.class); human.getColor(); human.talK(); System.out.println("女娲造白种人"); human = factory.creatHuman(WhiteHUman.class); human.getColor(); human.talK(); }AbstrctHumanFactory:
package com.sanyinchen.factory; public abstract class AbstrctHumanFactory { public abstract <T extends Human> T creatHuman(Class<T> c); }
HumanFactory:
package com.sanyinchen.factory; public class HumanFactory extends AbstrctHumanFactory { @SuppressWarnings({ "unchecked", "unchecked" }) @Override public <T extends Human> T creatHuman(Class<T> c) { // TODO Auto-generated method stub T human = null; try { human = (T) Class.forName(c.getName()).newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return human; } }运行结果:
女娲造黄种人 我是黄种人 黄种人在说话 女娲造黑种人 我是黑种人 黑种人在说话 女娲造白种人 我是白种人 白种人在说话
(1)具有良好的封装性
(2)工厂模式具有很好的扩展性
(3)屏蔽产品类
(4)工厂模式是典型的解耦框架