设计模式的-工厂模式

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()
下面是全部代码
- // 定义一个约定的规则抽象类
- 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()
-
-
参考资料: