知食记
搜索文档…
抽象工厂模式

直接上代码

1
// 具体工厂继承自抽象工厂
2
class FakeStarFactory extends MobilePhoneFactory {
3
createOS() {
4
// 提供安卓系统实例
5
return new AndroidOS()
6
}
7
createHardWare() {
8
// 提供高通硬件实例
9
return new QualcommHardWare()
10
}
11
}
12
13
// 定义操作系统这类产品的抽象产品类
14
class OS {
15
controlHardWare() {
16
throw new Error('抽象产品方法不允许直接调用,你需要将我重写!');
17
}
18
}
19
20
// 定义具体操作系统的具体产品类
21
class AndroidOS extends OS {
22
controlHardWare() {
23
console.log('我会用安卓的方式去操作硬件')
24
}
25
}
26
27
class AppleOS extends OS {
28
controlHardWare() {
29
console.log('我会用🍎的方式去操作硬件')
30
}
31
}
Copied!
使用的时候代码
1
// 这是我的手机
2
const myPhone = new FakeStarFactory()
3
// 让它拥有操作系统
4
const myOS = myPhone.createOS()
Copied!
假如有一天,FakeStar过气了,我们需要产出一款新机投入市场,这时候怎么办?我们是不是不需要对抽象工厂MobilePhoneFactory做任何修改,只需要拓展它的种类:
1
class newStarFactory extends MobilePhoneFactory {
2
createOS() {
3
// 操作系统实现代码
4
}
5
createHardWare() {
6
// 硬件实现代码
7
}
8
}
Copied!
这么个操作,对原有的系统不会造成任何潜在影响 所谓的“对拓展开放,对修改封闭”就这么圆满实现了。前面我们之所以要实现抽象产品类,也是同样的道理。
最近更新 1yr ago
复制链接