简单工厂中创建实例的方法通常是静态方法,所以简单工厂模式(simple factory pattern)也被叫做静态工厂方法模式(static factory method pattern)。
1、简单工厂模式的结构
- 简单工厂(SimpleFactory):是简单工厂的核心,负责创建所有的产品,具有一定的逻辑;
- 抽象产品(Product):是简单工厂负责创建的所有对象的父类或者接口类,负责描述所有产品实例的公共接口;
- 具体产品(ConcreteProduct):是简单工厂负责创建的所有的对象类。
2、简单工厂的优缺点
- 优点:
工厂和产品职责明确,工厂负责产品创建,产品负责业务逻辑;
客户端无需知道具体产品类型,只需要知道对象参数即可;
- 缺点
工厂类单一,负责所有产品的创建,职责过重,未被高聚合原则
维护困难,只要增加新的产品就需要维护工厂类
简单工厂类使用了static方法,使得工厂角色无法被继承
3、代码示例
import org.junit.Test;
/**
* 简单工厂模式:通过不同的参数控制工厂生产不同的产品
* 优点:
* 1、工厂和产品职责明确,工厂负责产品创建,产品负责业务逻辑
* 2、客户端无需知道具体产品类型,只需要知道对象参数即可
* 缺点:
* 1、工厂类单一,负责所有产品的创建,职责过重,未被高聚合原则
* 2、维护困难,只要增加新的产品就需要维护工厂类
* 3、简单工厂类使用了static方法,使得工厂角色无法被继承
*/
public class SimpleFactoryPattern {
/**
* 工厂类
*/
static class SimpleFactory {
public static Product createProduct(int cond) {
Product product;
switch (cond) {
case 1:
product = new ConcreteProduct1();
break;
case 2:
product = new ConcreteProduct2();
break;
default:
product = null;
}
return product;
}
}
/**
* 抽象产品类
*/
interface Product {
void method();
}
/**
* 具体产品类1
*/
static class ConcreteProduct1 implements Product {
@Override
public void method() {
// do something
}
}
/**
* 具体产品类2
*/
static class ConcreteProduct2 implements Product {
@Override
public void method() {
// do something
}
}
@Test
public void SimpleFactoryTest() {
Product product = SimpleFactory.createProduct(1); // 调用静态工厂方法,创建产品对象
product.method();
}
}