初探工厂抽象模式

设计模式的-工厂模式

工厂模式之抽象类

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/717387.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【ARMv8/ARMv9 硬件加速系列 3.4 -- SVE 复制指令CPY 使用介绍】

文章目录 SVE 复制指令CPYSVE 指令格式SVE 使用语法SVE CPY 使用示例SVE CPY 小结SVE 复制指令CPY CPY <Zd>.<T>, <Pg>/M, #<imm>{, <shift>}cpy 指令在 ARMv9 的

【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt系统相关 | Qt事件 | 事件的介绍及基本概念 文章编号&#xff1a;Qt…

JPS(Jump Point Search)跳点搜索路径规划算法回顾

本篇文章主要回顾一下几年前学的JPS跳点搜索规划算法的相关内容&#xff0c;之前学的时候没有进行概括总结&#xff0c;现在补上 一、A*算法简单回顾 – 1、基本介绍和原理 A*&#xff08;A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法&#xff0c;也是解决许多…

【Java】Math、System、RunTime、BigDecimal类常用方法

目录 1.Math2.System3.RunTime4.BigDecimal 1.Math 数学类&#xff0c;对数据提供数学相关操作的工具类。 常见操作方法如下&#xff1a; 2.System System代表程序所在的系统&#xff0c;也是一个工具类。 拓展&#xff1a;系统起始时间的确定&#xff1a;1970.1.1 3…

【日常记录】【插件】prisma 链接MySQL数据库 简单入门

文章目录 1、新建项目&#xff0c;使用prisma链接数据库1.1、先创建一个项目1.2、初始化 npm 配置文件及下载依赖1.3、初始化TS配置文件1.4、初始化 prisma1.5、更改 prisma/schema.prisma1.6 更改.env 文件1.7 编写 prisma/schema.prisma1.8 将编写的 prisma/schema.prisma 映…

【Nvidia+AI摄像头】面向机器人双目视觉相机

随着人工智能和机器人技术的不断发展&#xff0c;双目深度相机作为一种重要的传感器&#xff0c;正在被广泛应用于各种机器人系统中。双目深度相机作为机器人不可或缺的感知器件&#xff0c;其高精度深度信息为机器人提供环境感知、立体视觉、姿态识别等功能&#xff0c;让机器…

Stable Diffusion 3 Medium 正式开源

Stable Diffusion 3 Medium 正式开源 Stability AI宣布Stable Diffusion 3 Medium现已开源&#xff0c;这是最新的文本生成图像AI模型&#xff0c;被官方声称为“迄今为止最先进的开源模型”&#xff0c;其性能超过了Midjourney 6。 这款Stable Diffusion 3 Medium模型拥有2…

【中学教资科目二】01教育基础

01教育基础 前言第一节 教育的产生与发展1.1 教育的起源 第二节 教育学的产生和发展2.1 中国教育学的发展2.2 西方教育学的发展2.3 独立及多样化阶段2.4 马克思教育学2.5 现代教育发展 第三节 教育与社会的发展3.1 教育与文化的关系 第四节 教育与人的发展、4.1 个体身心发展的…

[Python学习篇] Python字典

字典是一种可变的、无序的键值对&#xff08;key-value&#xff09;集合。字典在许多编程&#xff08;Java中的HashMap&#xff09;任务中非常有用&#xff0c;因为它们允许快速查找、添加和删除元素。字典使用花括号 {} 表示。字典是可变类型。 语法&#xff1a; 变量 {key1…

html入门综合练习

综合练习 通过实际项目练习可以更好地理解和掌握HTML、CSS和JavaScript。以下是几个综合练习项目的建议&#xff1a; 项目1&#xff1a;个人简历网页 创建一个包含以下内容的个人简历网页&#xff1a; 个人简介&#xff08;姓名、照片、联系方式&#xff09;教育背景工作经…

Excel文件损坏怎么修复?这2个方法要学会

当你的excel文件不可读&#xff0c;或者出现提示“文件已经被损坏&#xff0c;无法打开”&#xff0c;这种情况时&#xff0c;会给我们正常的工作带来很多麻烦&#xff0c;文件损坏打不开怎么办&#xff1f;来看看这2招&#xff0c;详细的图文教程&#xff0c;小白也能轻松恢复…

解禁日大涨,爱玛科技的投资前景值得信任吗?

6月17日&#xff0c;爱玛迎来6.28亿股、金额超190亿元的解禁&#xff0c;占总股本72.91%。不过&#xff0c;爱玛股价在巨量解禁中反而迎来涨势&#xff0c;因为这部分股票中&#xff0c;创始人张剑持有的限售股数量几乎就占了爱玛总股本的七成。某种意义上&#xff0c;市场认为…

国货骄傲精亿内存条颠覆游戏战场,推出超强DDR5 7200玄武系列电竞内存

随着科技的迅猛发展,对高性能电脑的需求不断增长,特别是在电竞领域。认识到这一点,国货知名品牌精亿(JINGYI)推出了其全新一代DDR5 7200 RGB电竞内存条,并命名系列为象征中国上古四大神兽的玄武-系列。这款产品凭借其卓越性能和令人印象深刻的海力士A-DIE颗粒配置,正在迅速成为…

Virtualbox7.0版本安装报错:Invalid installation directory

错误情况 我在安装virtualbox最新版7.0.18时候&#xff0c;因为默认安装在C盘&#xff0c;我改成了E盘&#xff0c;然后就报错 Invalid installation directory The chosen installation directory is invalid, as it does not meet the security requirements. Refer to th…

【乳业巨擘·数字革命先锋】光明乳业:上市公司科技蜕变,搭贝低代码引领未来新纪元

在这个由科技编织的未来世界里&#xff0c;光明乳业股份有限公司以巨人之姿&#xff0c;傲立于乳业之巅&#xff0c;以其无与伦比的胆识与魄力&#xff0c;引领了一场震撼业界的数字化革命。与低代码领域的创新领袖——搭贝的强强联合&#xff0c;不仅标志着光明乳业在数字化转…

I2C总线驱动——ap3216c光感传感器从寄存器手册开始入手的实战版(附思维导图)

文章目录 1.I2C驱动框架简介1.1 I2C总线驱动&#xff08;适配器驱动&#xff09;1.1.1 重要结构体1.1.2 重要函数 1.2 I2C设备驱动1.2.1 重要结构体1.2.2 重要函数 1.3 I2C设备和驱动匹配过程 2.I2C设备驱动编写2.1 确认原理图引脚及pinctrl子系统引脚配置信息2.2 确认设备树I2…

华为数通企业面试笔试实验题

1. 笔试题 1.1 实验拓扑 1.2 实验要求 公司A为小型销售公司,需要实现基本上网功能,蓝色部分为外网线,提供DHCP服务 DnsServer:114.114.114.114 帮助网管排查某一台计算机在某一台交换机的某个端口 2. 操作步骤 配置路由器相关的LAN侧接口IP地址 配置DHCP项,要求有PC1与PC2…

个人学习算法总结的基础crud与算法思想数据结构解释

建议都从简单的crud入手,结合生活理解了结构与操作在去进阶更难的东西,做事有规划有步骤有时间限制这样比较好进步 跳转阅读

xxe漏洞学习

一、什么是xxe漏洞 XXE就是XML外部实体注入&#xff0c;当允许引用外部实体时&#xff0c; XML数据在传输中有可能会被不法分子被修改&#xff0c;如果服务器执行被恶意插入的代码&#xff0c;就可以实现攻击的目的攻击者可以通过构造恶意内容&#xff0c;就可能导致任意文件读…

Java图形用户界面设计的布局管理器

LayoutManager布局管理器 前言一、布局管理器的背景简介 二、FlowLayout构造方法参数说明代码演示AWTSwing 三、BorderLayout布局管理器注意点构造方法代码演示AWT示例一示例二 Swing 四、GridLayout简介构造方法代码示例AWTSwing 五、GridBagLayoutGridBagConstraints APIGrid…