工厂方法模式的意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
工厂方法模式的结构图如下:
工厂方法模式的java代码实现:
先构造出抽象产品类型(Product):也就是对待构造类型抽象后的接口。
再构造出具体产品类型(ConcreteProduct):具体待构造的类型,需要由工厂延迟实例化。
package factorymethod; public interface Product {}
package factorymethod; public class ProductA implements Product{}
package factorymethod; public class ProductB implements Product{}工厂类型的抽象接口(Factory)
package factorymethod; public interface Factory { Product newInstance(); }
具体工厂类型(ConcreteFactory)
package factorymethod; class FactoryA implements Factory{ @Override public Product newInstance() { return new ProductA(); } } class FactoryB implements Factory{ @Override public Product newInstance() { return new ProductB(); } }
工厂方法模式的适用性:
1、客户程序需要隔离自己与待new()类型间的耦合关系。
2、开发阶段客户程序还无法明确预知需要new()的具体类型。
3、客户程序将new()的工作交给外部对象来完成。
4、各种需要new()的对象虽然可以统一抽象为某个接口,但他们的继承关系太过繁琐,层次也比较复杂,这时,同样可以通过工厂方法解决这个问题。