1、简单工厂方法模式
如上图,运输工具包含了飞机和轮船,统一由运输工厂创建。
运输工具接口:
1 2 3 public interface Transportation { void transport () ; }
飞机:
1 2 3 4 5 6 7 public class AirPlaneTransport implements Transportation { @Override public void transport () { System.out.println("Transport by airplane..." ); } }
轮船:
1 2 3 4 5 6 7 public class SteamerTransport implements Transportation { @Override public void transport () { System.out.println("transport by steamer..." ); } }
运输工具工厂:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class TransportFactory { public static Transportation createTransport (int type) { Transportation result = null ; switch (type) { case TransportConstants.TYPE_AIRPLANE: result = new AirPlaneTransport(); break ; case TransportConstants.TYPE_STEAMER: result = new SteamerTransport(); break ; } return result; } public static void main (String[] args) { Transportation transportation = TransportFactory.createTransport(TransportConstants.TYPE_AIRPLANE); transportation.transport(); } }
1.1、优点
达到了对象创建和使用分离的目的;
客户端通过传入特定类型参数直接通过工厂类创建产品,无需知道具体类名;
如果需要新增具体产品,无需修改客户端调用代码,提供系统灵活性。
1.2、缺点
工厂中需要根据特性类型来创建产品,职责过重;
添加新的具体产品,需要修改工厂方法,违反了开闭原则;
简单工厂是静态方法,无法继承扩展,不能形成基于工厂的继承体系。
2、工厂方法模式
3、抽象工厂模式
References
工厂方法模式
【设计模式】简单工厂、工厂方法与抽象工厂的区别