简单工厂模式的不足:如果有新的产品加入到系统中,不得不去修改工厂类
工厂方法模式:核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做,这个核心类就变成了抽象工厂模式。
公共产品接口
package com.javapatterns.factorymethod; public interface Product { }
具体产品1
package com.javapatterns.factorymethod; public class ConcreteProduct1 implements Product { public ConcreteProduct1() { System.out.println("CocnreteProduct1 is being created."); } }
具体产品2
package com.javapatterns.factorymethod; public class ConcreteProduct2 implements Product { public ConcreteProduct2() { System.out.println("CocnreteProduct2 is being created."); } }
抽象工厂
package com.javapatterns.factorymethod; public interface Creator { public Product factory(); }
生产具体产品1的具体工厂1
package com.javapatterns.factorymethod; public class ConcreteCreator1 implements Creator { public Product factory() { return new ConcreteProduct1(); } }
生产具体产品2的具体工厂2
package com.javapatterns.factorymethod; public class ConcreteCreator2 implements Creator { public Product factory() { return new ConcreteProduct2(); } }
客户代码
package com.javapatterns.factorymethod; public class Client { private static Creator creator1, creator2; private static Product prod1, prod2; public static void main(String[] args) { creator1 = new ConcreteCreator1(); prod1 = creator1.factory(); creator2 = new ConcreteCreator2(); prod2 = creator2.factory(); } }
我们可以看到,在增加一个产品,我们只要自己再写一个具体产品类继承抽象产品,具体工厂类继承抽象工厂,在客户端就可以调用了,在工厂中我们不用修改现有的代码,是不是很方便。。。但是这样做带来的结果就是增加了大量的类