定义
工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂模式(Polymorphic Factory),在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。
工厂方式法模式(Factory Method),定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。
意图
定义一个用户创建对象的接口,让子类决定实例化哪一个类,工厂方法模式使一个类的实例化延迟到其子类。
参与者
抽象产品角色(Product):定义产品的接口
具体产品角色(ConcreteProduct) :实现接口Product的具体产品类
抽象工厂角色(Creator) :声明工厂方法(FactoryMethod),返回一个产品
真实的工厂(ConcreteCreator):实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例
image.png
定义产品接口
public interface Product {
//声明类所需继承的共同接口,也可以是抽象类
}
产品的实现类A
public class ProductA implements Product {
public ProductA() {
System.out.println("ProductA");
}
}
产品的实现类B
public class ProductB implements Product {
public ProductB() {
System.out.println("ProductB");
}
}
声明工厂接口
public interface Factory {
//声明产生产品类的方法
public Product createProduct();
}
产品A的工厂实现类
public class FactoryA implements Factory {
//实现工厂类的方法生成产品类A
public Product createProduct()
{
return new ProductA();
}
}
产品B的工厂实现类
public class FactoryB implements Factory {
//实现工厂类的方法生成产品类A
public Product createProduct()
{
return new ProductB();
}
}
调用
public class Client {
public static void main(String[] args) {
Factory factory;
factory = new FactoryA();
factory.createProduct();
factory = new FactoryB();
factory.createProduct();
}
}