设计模式之工厂方法
工厂方法:
百度百科的定义:
工厂方法模式(FACTORYMETHOD)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,
提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,
分别是抽象工厂;具体工厂;抽象产品;具体产品
UML类图
具体的代码
public interface Creator { ICar createCar(); } public class BenzCreator implements Creator { @Override public ICar createCar() { return new BenzCar(); } } public class BmwCreator implements Creator { @Override public ICar createCar() { return new BmwCar(); } } public interface ICar { void run(); } public class BenzCar implements ICar { @Override public void run() { System.out.println("Benz is Running"); } } public class BmwCar implements ICar { @Override public void run() { System.out.println("BWM is Running"); } } public class Client { public static void main(String[] args) { Creator benzCreator = new BenzCreator(); benzCreator.createCar().run(); Creator bmwCreator = new BmwCreator(); bmwCreator.createCar().run(); } }
具体角色
接口 Creator 的角色为抽象工厂所有的具体工厂继承抽象工厂
实现类 BenzCreator 和 BmwCreator为具体的工厂,用户创建对应产品的实例
接口 ICar 的角色为产品的抽象产品,所有的具体产品继承抽象产品
实现类 BenzCar 和 BmwCar 为具体的产品,实现具体产品的行为
具体应用场景:
引用下《设计模式:可复用面向对象软件的基础》
”为创建一个对象定义一个接口,但把具体创建哪个类的实例留给子类决定。工厂方法允许将一个类的初始化延迟到自己的子类“
工厂方法模式的使用场合
客户端不知道它要创建的具体是哪一个子类。
一个类想要由自己的子类来定义某对象的创建过程。
类将创建某对象的职责代理给一些帮助子类中的一个,并且你想要将哪一个子类作为代理的信息进行局部化。
优缺点:
优点:
在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。
在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。
缺点:
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。
作者: 重名 出处: http://www.cnblogs.com/daily-note