工厂方法模式
定义:
定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使得一个类的实例化延迟到子类。
工厂方法模式将工厂抽象化,并定义一个创建对象接口。每增加新产品,只需要增加该产品及对应的实现工厂类,将对象的实例延迟到子类,这样设计就符合开闭原则。在使用时,只需知道产品对应的具体工厂,关注具体的创建过程,甚至不需要知道具体产品类的类名,当我们选择哪个具体工厂时,就已经决定了实际创建的产品是哪个了。
但缺点在于,每增加一个产品都需要增加一个具体产品类和实现工厂类,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
代码实例:
产品相关类:
abstract class Product {
void product() {}
}
class ProductA extends Product{
void product(){
System.out.println("产品A");
}
}
class ProductB extends Product{
void product(){
System.out.println("产品B");
}
}
工厂相关类:
interface Factory {
Product creteProduct();
}
class FactoryProductA implements Factory{
public ProductA creteProduct() {
System.out.println("制造产品A...");
return new ProductA();
}
}
class FactoryProductB implements Factory {
public ProductB creteProduct() {
System.out.println("制造产品B...");
return new ProductB();
}
}
使用者相关类:
public class FactoryMethod {
public static void main(String[] args) {
Factory factoryA = new FactoryProductA();
factoryA.creteProduct().product();
Factory factoryB = new FactoryProductB();
factoryB.creteProduct().product();
}
}