初探工厂抽象模式

设计模式的-工厂模式

工厂模式之抽象类

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工厂模式·抽象工厂 - 哔哩哔哩

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值