一、定义
简单工厂模式(Simple Factory Pattern),又称为静态工厂方法模式(Static Factory Pattern),属于类创建型模式。在简单工厂模式里通过不同的参数,返回不同的类实例。
二、简单工厂的UML类图
classDiagram
class Product{
+use() void
}
<<interface>> Product
Product <|-- ConcreteProductA
Product <|-- ConcreteProductB
Factory --> ConcreteProductA
Factory --> ConcreteProductB
class ConcreteProductA{
+use() void
}
class ConcreteProductB{
+use() void
}
class Factory{
+PRODUCT_A String
+PRODUCT_B String
+createProduct(type String)$ Product
}
三、代码实现
简单工厂模式包含三个角色:
- Product:抽象产品角色 抽象产品角色是所创建的所有类的父类,定义了公共的接口
interface Product{
public void use();
}
- ConcreteProduct:具体产品角色
class ConcreteProductA implements Product{
public void use(
System.out.print("ConcreteProductA use()");
);
}
class ConcreteProductB implements Product{
public void use(
System.out.print("ConcreteProductB use()");
);
}
- Factory:工厂角色
public static Factory{
public static String PRODUCT_A = "A";
public static String PRODUCT_B = "B";
public static Product createProduct(String type){
if(PRODUCT_A == type){
return ConcreteProductA();
}else if(PRODUCT_B == type){
return ConcreteProductB();
}
return NULL;
}
}
四、优点
- 使对象的创建和对象的使用分离。
- 不用知道具体的创建对象名称。只需记住对应的参数即可,减少记忆量。
- 工厂通过静态方法来创建对象,使用方便。
五、缺点
- 新增具体的创建对象时,需要修改工厂创建类的方法,违背了开闭原则。
- 新增的产品类型较多时,会造成工厂方法过于复杂,不利于维护。
- 增加了类的数量。多了一个工厂类和抽象产品类。
六、使用场景
Java加密技术 获取不同加密算法的密钥生成器:
KeyGenerator keyGen=KeyGenerator.getInstance("DESede");
七、总结
对于如何创建对象不关心和一些复杂的对象创建可以使用简单工厂来实现。