设计模式的指导思想是:通过找到不同场景下,需求容易发生变化的地方,把这一部分变化的逻辑封装起来。
创造型设计模式一共有5种:工厂模式、抽象工厂、单例模式、创造者模式、原型模式。
作用
抽象工厂的作用和工厂模式基本一样,把实际子类型的创建逻辑封装在工厂方法中,通过调用工厂方法决定返回具体的子类型;不同点在抽象工厂有多个工厂方法,返回同一类型的不同产品。
通常在创建过程复杂的场景下使用。
实现步骤
- 定义多个抽象产品。
- 给每一种抽象产品定义不同的实现产品。
- 定义包含多个工厂方法的抽象工厂。工厂方法和抽象产品的种类对应。
- 定义不同的实际工厂,用来实现抽象工厂。实际工厂中的工厂方法返回具体的产品。
示例:
代码语言:javascript复制/**
* 抽象产品A
*/
export interface AbstractProductA{
methodA(params?: any): any
}
/**
* 抽象产品B
*/
export interface AbstractProductB{
methodB(params?: any): any
}
/**
* 产品A1
*/
export class ProductA1 implements AbstractProductA{
methodA(params?: any): any{
return 'ProductA1'
}
}
/**
* 产品A2
*/
export class ProductA2 implements AbstractProductA{
methodA(params?: any): any{
return 'ProductA2'
}
}
/**
* 产品B1
*/
export class ProductB1 implements AbstractProductB{
methodB(params?: any): any{
return 'ProductB1'
}
}
/**
* 产品B2
*/
export class ProductB2 implements AbstractProductB{
methodB(params?: any): any{
return 'ProductB2'
}
}
/**
* 抽象工厂,返回的是抽象产品
*/
export interface AbstractFactory{
createProductA(params: any): AbstractProductA
createProductB(params: any): AbstractProductB
}
/**
* 实际工厂1
*/
export class AFactory1 implements AbstractFactory{
createProductA(params: any): AbstractProductA{
return new ProductA1
}
createProductB(params: any): AbstractProductB{
return new ProductB1
}
}
/**
* 实际工厂2
*/
export class AFactory2 implements AbstractFactory{
createProductA(params: any): AbstractProductA{
return new ProductA2
}
createProductB(params: any): AbstractProductB{
return new ProductB2
}
}
缺点
引入了众多的接口和类。