设计模式的-工厂模式
1.定义一个约定的规则抽象类
class ETFactory {createStore() {throw new Error('抽象方法,不允许直接调用,需重写')}createUser(){throw new Error('抽象方法,不允许直接调用,需重写')}
}
案例:定义两个具体店铺
定义一个地址的抽象规则类
class ETStore {getAddress() {throw new Error('抽象方法,需要重写')}
}
继承上面地址的抽象类,创建方法
万达具体实现类
class WandaStore extends ETStore{getAddress(){return console.log('万达金铺360号')}
}
万象城具体实现类
class WanxiangchengStore extends ETStore{getAddress(){return console.log('万象城1006号一层')}
}
定义:员工的抽象类
class ETUser {getSkill(){throw new Error('抽象方法,需要重写')}
}
继承上面员工的抽象类,创建方法
spa技师具体实现类
class SpaTech extends ETUser{getSkill(){return console.log('spa 技师:精油spa,香薰spa')}
}
按摩技师具体实现类
class SofaTech extends ETUser{getSkill(){return console.log('按摩 技师:柔式按摩,瑜伽按摩')}
}
定义一个具体的规则类
class AchieveFactory extends ETFactory {createStore(){return new WandaStore()}createUser(){return new SpaTech()}
}
创建一个店铺:
// 开店喽
const Honghong = new AchieveFactory()
const store1 = Honghong.createStore()
const store2 = Honghong.createUser()// 打印门店地址
store1.getAddress()
// 打印员工技能
store2.getSkill()
再创建一个新的店铺
还是用之前创建的方法
// 开新店喽
// 定义一个具体的规则类
class NewAchieveFactory extends ETFactory {createStore(){return new WanxiangchengStore()}createUser(){return new SofaTech()}
}
声明新的实例
// 开分店喽
const Honghong1 = new NewAchieveFactory()
const store3 = Honghong1.createStore()
const store4 = Honghong1.createUser()// 打印门店地址
store3.getAddress()
// 打印员工技能
store4.getSkill()
下面是全部代码
<script>// 定义一个约定的规则抽象类class ETFactory {createStore() {throw new Error('抽象方法,不允许直接调用,需重写')}createUser(){throw new Error('抽象方法,不允许直接调用,需重写')}}// 定义一个具体的规则类class AchieveFactory extends ETFactory {createStore(){return new WandaStore()}createUser(){return new SpaTech()}}// 定义一个抽象的规则类class ETStore {getAddress() {throw new Error('抽象方法,需要重写')}}// 定义两个具体店铺// 万达具体实现类class WandaStore extends ETStore{getAddress(){return console.log('万达金铺360号')}}// 万象城具体实现类class WanxiangchengStore extends ETStore{getAddress(){return console.log('万象城1006号一层')}}// 员工的抽象类class ETUser {getSkill(){throw new Error('抽象方法,需要重写')}}// spa技师具体实现类class SpaTech extends ETUser{getSkill(){return console.log('spa 技师:精油spa,香薰spa')}}// 按摩技师具体实现类class SofaTech extends ETUser{getSkill(){return console.log('按摩 技师:柔式按摩,瑜伽按摩')}}// 开店喽const Honghong = new AchieveFactory()const store1 = Honghong.createStore()const store2 = Honghong.createUser()// 打印门店地址store1.getAddress()// 打印员工技能store2.getSkill()// 开新店喽// 定义一个具体的规则类class NewAchieveFactory extends ETFactory {createStore(){return new WanxiangchengStore()}createUser(){return new SofaTech()}}// 开分店喽const Honghong1 = new NewAchieveFactory()const store3 = Honghong1.createStore()const store4 = Honghong1.createUser()// 打印门店地址store3.getAddress()// 打印员工技能store4.getSkill()</script>
参考资料:
JS设计模式_03工厂模式·抽象工厂 - 哔哩哔哩