工厂模式(Factory Pattern)
约 593 字大约 2 分钟
工厂模式 (Factory Pattern) in TypeScript
什么是工厂模式?
工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,而无需指定具体类。工厂模式通过定义一个创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类。
工厂模式的优点
- 解耦:客户端不需要知道具体类的类名,只需要知道工厂接口。
- 可扩展性:增加新的产品类时,只需要增加相应的工厂类即可。
- 单一职责原则:将对象的创建和使用分离。
工厂模式的实现
在 TypeScript 中,我们可以通过接口和类来实现工厂模式。下面是一个简单的例子:
示例:饮料工厂
假设我们有一个饮料工厂,可以生产不同类型的饮料,如咖啡和茶。
// 饮料接口
interface Drink {
consume(): void;
}
// 咖啡类
class Coffee implements Drink {
consume(): void {
console.log("Drinking coffee...");
}
}
// 茶类
class Tea implements Drink {
consume(): void {
console.log("Drinking tea...");
}
}
// 饮料工厂接口
interface DrinkFactory {
createDrink(): Drink;
}
// 咖啡工厂
class CoffeeFactory implements DrinkFactory {
createDrink(): Drink {
return new Coffee();
}
}
// 茶工厂
class TeaFactory implements DrinkFactory {
createDrink(): Drink {
return new Tea();
}
}
// 客户端代码
function clientCode(factory: DrinkFactory) {
const drink = factory.createDrink();
drink.consume();
}
// 使用工厂模式创建饮料
clientCode(new CoffeeFactory()); // 输出: Drinking coffee...
clientCode(new TeaFactory()); // 输出: Drinking tea...代码解析
- 接口
Drink:定义了饮料的行为。 - 具体类
Coffee和Tea:实现了Drink接口,表示具体的饮料。 - 工厂接口
DrinkFactory:定义了创建饮料的方法。 - 具体工厂类
CoffeeFactory和TeaFactory:实现了DrinkFactory接口,负责创建具体的饮料对象。
工厂模式的应用场景
- 当类不知道它所必须创建的对象的类时。
- 当一个类希望由它的子类来指定它所创建的对象时。
- 当类将创建对象的职责委托给多个帮助子类中的某一个,并且希望将哪一个帮助子类是代理者这一信息局部化时。
结论
工厂模式是一种强大的设计模式,适用于需要解耦对象创建和使用的场景。通过使用工厂模式,我们可以提高代码的可维护性和可扩展性。