样例代码
class OS {
constructor() {
if (new.target === OS) {
throw new Error('不能实例化抽象类')
}
}
}
// 定义具体操作系统的具体产品类
class AndroidOS extends OS {
constructor() {
super()
}
controlHardWare() {
console.log('我会用安卓的方式去操作硬件')
}
}
class HardWare {
constructor() {
if (new.target === HardWare) {
throw new Error('不能实例化抽象类')
}
}
// 手机硬件的共性方法,这里提取了“根据命令运转”这个共性
operateByOrder() {
throw new Error('抽象产品方法不允许直接调用,你需要将我重写!');
}
}
// 定义具体硬件的具体产品类
class QualcommHardWare extends HardWare {
constructor() {
super()
}
operateByOrder() {
console.log('我会用高通的方式去运转')
}
}
class MobilePhoneFactory {
constructor() {
if (new.target === MobilePhoneFactory) {
throw new Error('不能实例化抽象类')
}
}
// 提供操作系统的接口
createOS() {
throw new Error("抽象工厂方法不允许直接调用,你需要将我重写!");
}
// 提供硬件的接口
createHardWare() {
throw new Error("抽象工厂方法不允许直接调用,你需要将我重写!");
}
}
class FakeStarFactory extends MobilePhoneFactory {
constructor() {
super()
}
createOS() {
// 提供安卓系统实例
return new AndroidOS()
}
createHardWare() {
// 提供高通硬件实例
return new QualcommHardWare()
}
}
var ff = new FakeStarFactory()
console.log(ff)
let os = ff.createOS()
console.log(os)
os.controlHardWare()
console.log(new MobilePhoneFactory())
参考地址
- juejin.cn/book/684473…
- juejin.cn/post/684490…