简单工厂是属于创建型模式,又叫静态工厂方法 Static Factory Method 模式,简单工厂是由一个工厂创建对象决定创建出那一种产品类的实例。
Creator
简单工厂的核心,它负责实现创建所有实例的内部逻辑。被提供给客户端调用,创建所需的产品对象。
IProduct
抽象产品所被创建所有对象的父类型,它所负责描述所有实例公共行为。
Concrete Product
具体被创建出的对象,是简单工厂的创建目标。
public interface IProduct {
void function();
}
public class Producta implements IProduct {
@Override
public void function() {
System.out.println(“Producta 的行为!”);
}
}
public class Productb implements IProduct {
@Override
public void function() {
System.out.println(“Productb 的行为!”);
}
}
public class ProductFactory {
private ProductFactory() {
}
public static final IProduct getInstance(String key) {
IProduct product = null;
switch (key) {
case "A":
product = new Producta();
break;
case "B":
product = new Productb();
break;
}
return product;
}
}
优点:工厂类是整个模式的关键,包含了必要的逻辑判断,根据客户端给定的信息,决定究竟创建哪个具体类的对象。通过使用工厂类客户端可以直接创建具体产品类对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不需要知道如何创建的细节。
缺点:由于工厂类集中了所有的创建逻辑,会很复杂导致了全部逻辑都集中到了一个工厂类中,如果需要添加新的产品类,需要改动到工厂类,难免会改错造成不必要的错误。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求。这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;