工厂方法模式:
需要的类:抽象工厂,具体工厂,抽象产品,具体产品
此模式符合开闭原则:对扩展开放,对修改关闭。
缺点:每增加一种产品要增加对应的具体工厂,代码量会很多。
抽象工厂类:AbstractMethedFactory
/** * 抽象工厂类 */ public interface AbstractMethedFactory { Trunk produceTrunk(); }
具体工厂类:BmwFactory
/** * 具体工厂类:宝马工厂 */ public class BmwFactory implements AbstractMethedFactory{ @Override public Trunk produceTrunk() { return new Bmw(); } }
具体工厂类:AudiFactory
/** * 具体工厂类:奥迪工厂 */ public class AudiFactory implements AbstractMethedFactory{ @Override public Trunk produceTrunk() { return new Audi(); } }
抽象产品类:Trunk
/** * 抽象产品类:卡车 */ public interface Trunk { void build(); }
具体产品类:Bmw
/** * 具体产品类:宝马卡车 */ public class Bmw implements Trunk{ @Override public void build() { System.out.println("制造了一辆宝马卡车"); } }
具体产品类:Audi
/** * 具体产品类:奥迪卡车 */ public class Audi implements Trunk{ @Override public void build() { System.out.println("制造了一辆奥迪卡车"); } }
测试类:
public class Test { public static void main(String[] args){ AbstractMethedFactory factory = new AudiFactory(); factory.produceTrunk().build(); AbstractMethedFactory factory1 = new BmwFactory(); factory1.produceTrunk().build(); } }
运行结果: