工厂方法模式(别名Virtual Constructor)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
特点:
原则:
依赖倒置原则:要依赖抽象,不要依赖具体类。
依赖倒置的指导方针:
实现:
抽象工厂(工厂方法模式的核心,也可以是抽象类):
public interface Creator { public Product factory(); }
具体工厂:
public class ConcreteCreator1 implements Creator { public Product factory() { return new ConcreteProduct1(); } }
public class ConcreteCreator2 implements Creator { public Product factory() { return new ConcreteProduct2(); } }
抽象产品:
public interface Product { }
具体产品:
public class ConcreteProduct1 implements Product { public ConcreteProduct1() { System.out.println("CocnreteProduct1 is being created."); } }
public class ConcreteProduct2 implements Product { public ConcreteProduct2() { System.out.println("CocnreteProduct2 is being created."); } }
适用性:
在以下情况下,适用于Factory Method模式:
参与者:
Creator:
声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。
4. ConcreteCreator:实现Creator以返回一个ConcreteProduct实例