大白话简单工厂模式(Simple Factory Pattern)中经过买车的经历解释了简单工厂模式。但熟悉设计模式的朋友会发现一些问题。java
因此,随着企业的发展,日产公司决定将每种车型进行分工厂制造,解决了上述问题。这种方法在设计模式中被称为工厂方法模式设计模式
下面咱们从代码的角度进行分析。4S店卖车首先要有车,这里只取日产部分车型逍客,轩逸和天籁。
代码片断1 日产车父类,全部车型都继承此类。ide
/** * 日产车 * @author coderzcr */ abstract class NissanCar { String name; void printCar(){ System.out.println(name+"汽车已制造完成"); } }
代码片断2 车型:逍客学习
/** * 车型:逍客 * @author coderzcr */ class Xtrail extends NissanCar { Xtrail(){ this.name = "逍客"; } }
代码片断3 车型:轩逸this
/** * 车型:轩逸 * @author coderzcr */ class Sylphy extends NissanCar { Sylphy(){ this.name = "轩逸"; } }
代码片断4 车型:天籁设计
/** * 车型:天籁 * @author coderzcr */ class Altima extends NissanCar { Altima(){ this.name="天籁"; } }
有了具体的车型要求,咱们须要对不一样车型创建工厂。
代码片断5 日产工厂父类,全部工厂都继承此类。code
/** * 日产车工厂 * @author coderzcr */ public abstract class NissanCarFactory { /** * 生产汽车 */ abstract NissanCar createCar() ; }
代码片断6 天籁工厂。htm
/** * 天籁工厂 * @author coderzcr */ public class AltimaFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Altima(); } }
代码片断7 逍客工厂。对象
/** * 逍客工厂 * @author coderzcr */ public class XtrailFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Xtrail(); } }
代码片断8 轩逸工厂。
/** * 轩逸工厂 * @author coderzcr */ public class SylphyFactory extends NissanCarFactory { @Override NissanCar createCar() { return new Sylphy(); } }
图1 多工厂类图
工厂方法模式(Factory Method Pattern)又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式,它属于类建立型模式。在工厂方法模式中,工厂父类负责定义建立产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样作的目的是将产品类的实例化操做延迟到工厂子类中完成,即经过工厂子类来肯定究竟应该实例化哪个具体产品类。
工厂父类(日产车工厂)
工厂子类(轩逸工厂、天籁工厂、逍客工厂)
即产品的制造分配给子工厂,缓解单一工厂的压力。
图2 工厂方法模式结构
工厂方法模式包含以下角色:
添加新产品时,须要添加一个具体工厂和具体产品,在必定程度上增长了系统的复杂度,有更多的类须要编译和运行,会给系统带来一些额外的开销。