简单工厂模式
在简单工厂模式(Simple Factory Pattern)中,可以根据参数的不同返回不同类的实例。
简单工厂模式又称为静态工厂方法模式,它属于类创建型模式。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
示例图
示例代码
typescript
abstract class MilkTea {}
class BubbleTea extends MilkTea {}
class FruitTea extends MilkTea {}
class MilkTeaFactory {
static getInstance(className: string) {
switch (className) {
case 'BubbleTea':
return new BubbleTea();
case 'FruitTea':
return new FruitTea();
default:
throw new Error('Invalid class name');
}
}
}
// usage
const bubbleTea = MilkTeaFactory.getInstance('BubbleTea');
abstract class MilkTea {}
class BubbleTea extends MilkTea {}
class FruitTea extends MilkTea {}
class MilkTeaFactory {
static getInstance(className: string) {
switch (className) {
case 'BubbleTea':
return new BubbleTea();
case 'FruitTea':
return new FruitTea();
default:
throw new Error('Invalid class name');
}
}
}
// usage
const bubbleTea = MilkTeaFactory.getInstance('BubbleTea');
优缺点
优点
- 工厂类负责决定在什么情况下创建哪一个类的实例,客户端仅负责使用,实现职责分离,以降低系统的耦合度;
- 创建对象无需知道具体的类名,只需要知道具体产品类所对应的参数即可。
缺点
- 工厂类的职责相对过重,随着产品类的不断增多,在一定程序上增加了系统的复杂度和理解难度;
- 每次增加新产品时都需要修改工厂逻辑,违背了“开闭原则”。
使用场景
在软件开发中经常遇到应用需要创建的对象,一般至少有两种,一个抽象基类和多个不同的子类。如:
- 数据库驱动对象;
- 错误信息类。