抽象工厂模式
:
工厂方法模式
主要是作用与同一类产品,比如说:手机,而抽象工厂模式
是对一产品簇的抽象,比如说, 小米有小米手机,小米笔记本…
如果说 工厂方法模式
是对同一类产品的抽象,那么 抽象工厂模式
就是对同一类簇的抽象,也可以说是对一个复杂对象,进行更细致的抽象;
简单的类比,小米从当初的小米手机发展成小米商城,小米一开始创建时,只有小米手机这一类产品,此时可以用 工厂方法模式
,管理小米手机,但是当小米日益庞大,就需要更细致的划分,比如,小米手机,小米笔记本… 这个时候,就相当于 抽象工厂模式
。
不可缺少的对象
- 抽象出的类,一般都是2个及以上;
- 将抽出类进行整合的类。
// 手机的抽象类
abstract class Phone {
name: string;
price: number;
constructor(name: string, price: number) {
this.name = name;
this.price = price;
}
abstract call(): void;
}
// 笔记本的抽象类
abstract class Laptop {
name: string;
price: number;
constructor(name: string, price: number) {
this.name = name;
this.price = price;
}
// 打游戏
abstract game(gameName: string): void;
}
/**
* 小米本身作为一个产品簇,拥有手机,笔记本的多个品种,
* 1. 先实现产品簇中的某个产品类;
* 2. 在通过整个工厂,整合所有的产品
*/
class MiPhone extends Phone {
call() {
console.log("少林功夫好哎");
}
}
class MiLaptop extends Laptop {
game(gameName: string) {
console.log(`小米电脑适合${gameName}`);
}
}
class Mi {
getPhone(name: string, price: number) {
return new MiPhone(name, price);
}
getLaptop(name: string, price: number) {
return new MiLaptop(name, price);
}
}
const miShop = new Mi();
const miPhone = miShop.getLaptop("P40", 3600);
console.log(miPhone);