定义
原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康)
工厂模式:定义创建 对象的 工厂接口,具体的工厂实现来实现 产品对象的创建
简单工厂模式中创建实例的方法通常为静态(static)方法
优缺点
优点
- 产品的 创建和 使用 分离;调用者可以免除 创建 "产品"对象的职责
- 工厂类可以通过指定类型,生成不同的"产品"对象实例,调用者 无需知道"产品"对象的 具体内容
- 可以结合 配置中心 ;在无需修改代码的前提下 添加功能
缺点
- 简单工厂 的 工厂 单一,负责所有的 "产品"对象,对于复杂的业务,功能太重
- 一旦工厂类异常;整个使用工厂的 系统 都将崩溃
- 扩展相对困难;如果增加新的"产品"对象,必须修改 工厂方法;不符合“开闭原则”
使用场景
主要组成结构
简单工厂:根据指定类型 生产不同"产品"对象的 工厂类
抽象产品:定义工厂生产对象 的 公共部分
具体产品:工厂要具体创建的 对象
类图
代码实现
public class SimpleFactoryPattern {
public static void main(String[] args) {
final Product productA = SimpleFactory.creatProduct(1);
productA.getProduct();
final Product productB = SimpleFactory.creatProduct(2);
productB.getProduct();
}
public interface Product{
void getProduct();
}
static class ConcreteProductA implements Product{
@Override
public void getProduct() {
System.out.println("对象A");
}
}
static class ConcreteProductB implements Product{
@Override
public void getProduct() {
System.out.println("对象B");
}
}
static class SimpleFactory{
public static final int SCENE_A = 1;
public static final int SCENE_B = 2;
public static final int SCENE_C = 3;
public static Product creatProduct(int scene){
switch (scene){
case SCENE_A:
return new ConcreteProductA();
case SCENE_B:
return new ConcreteProductB();
default:
return new ConcreteProductA();
}
}
}
}