设计模式——工厂方法模式

时间:2022-05-29 07:27:25

工厂方法是工厂模式三种表现形式中的一种,另外两种是简单工厂和抽象工厂,三者的差异主要在于抽象程度的不同,实际上简单工厂和工厂方法很相似,差别只是简单工厂没有提供工厂接口。下面先给出工厂方法的示意图:
设计模式——工厂方法模式
如图所示,工厂方法模式需要定义一个用于创建对象的接口,然后让子类决定实例化哪一个类,其一个显著的特征就是使一个类的实例化延迟到其子类。给出代码更容易理解:

public interface IFactory {
public IProduct createProduct();
}

public interface IProduct {
public void productMethod();
}

public class Product implements IProduct {
@Override
public void productMethod() {
System.out.print("生产具体的产品");
}
}

public class Factory implements IFactory {
@Override
public IProduct createProduct() {
return new Product();
}

public static void main(String[] args) {
IFactory factory = new Factory();
IProduct product = factory.createProduct();
product.productMethod();
}
}

从代码可以清晰的看到具体的产品由具体的工厂类进行生产,且产品的细节对客户端来说是透明的,客户端只知道产品接口,也就是说当要生产另外一种产品或者原来产品生产方法需要修改时,将直接编写新的工厂类来生产新的产品或者在原来的工厂类上进行修改,而这一切客户端都不需要参与,调用接口方式与修改之前一致,这在一定程度上降低了耦合性和提高了程序的可扩展性。
工厂方法模式的缺点在于每次需要新的产品时就需要涉及新的对应的工厂类,也就是说类的数量是成对增长的,当系统量级大了之后这无疑将提升程序的复杂性。另外,由于客户端知道的都是比较抽象的工厂接口和产品接口,这会在某种程度上模糊程序的可理解性。