初探工厂抽象模式

设计模式的-工厂模式

工厂模式之抽象类

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…

Android Compose 文本输入框TextField使用详解

一、 TextField介绍 TextField 允许用户输入和修改文本&#xff0c;也就是文本输入框。 TextField 分为三种&#xff1a; TextField是默认样式OutlinedTextField 是轮廓样式版本BasicTextField 允许用户通过硬件或软件键盘修改文本&#xff0c;但不提供提示或占位符等装饰&a…

youlai-boot项目的学习—本地数据库安装与配置

数据库脚本 在项目代码的路径下&#xff0c;有两个版本的mysql数据库脚本&#xff0c;使用对应的脚本就安装对应的数据库版本&#xff0c;本文件选择了5 数据库安装 这里在iterm2下使用homebrew安装mysql5 brew install mysql5.7注&#xff1a;记得配置端终下的科学上网&a…

实时工业数据采集分析系统高效处理产线信息!

对于大部分制造业企业&#xff0c;测量仪器的自动数据采集一直是个令人烦恼的事情&#xff0c;即使仪器已经具有RS232/485等接口&#xff0c;但仍然在使用一边测量&#xff0c;一边手工记录到纸张&#xff0c;再输入到PC中处理的方式&#xff0c;不但工作繁重&#xff0c;同时也…

try catch return语句情况分析

try catch return语句情况分析 try catch无finally语句写在最后 try catch try catch语法是一种对应于异常处理的语句&#xff0c;其中try语句内用于编写有异常存在可能的语句&#xff0c;而catch语句内用于编写捕获到异常的类型以及对异常对象的处理方法&#xff0c;本文主要…

鸿蒙: 基础认证

先贴鸿蒙认证 官网10个类别总结如下 https://developer.huawei.com/consumer/cn/training/dev-cert-detail/101666948302721398 10节课学习完考试 考试 90分合格 3次机会 1个小时 不能切屏 运行hello world hvigorfile.ts是工程级编译构建任务脚本 build-profile.json5是工程…

IPA清洁棉签 IPA清洁擦拭棒:打印机头、电子设备等清洁的有力工具!

在数字化快速发展的今天&#xff0c;打印机头、电子设备等已经成为了我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着使用时间的增长&#xff0c;这些设备往往会因为灰尘、油渍等污染物的积累而影响其性能。此时&#xff0c;一款高效、便捷的清洁工具就显得尤为重…

数据预处理之基于聚类的TOD异常值检测#matlab

1.基于聚类的异常值检测方法 物以类聚——相似的对象聚合在一起&#xff0c;基于聚类的异常点检测方法有两个共同特点&#xff1a; (1)先采用特殊的聚类算法处理输入数据而得到聚类&#xff0c;再在聚类的基础上来检测异常。 (2)只需要扫描数据集若干次&#xff0c;效率较高…

3D Gaussian Splatting Windows安装

1.下载源码 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 2.安装cuda NVIDIA GPU Computing Toolkit CUDA Toolkit Archive | NVIDIA Developer 3.安装COLMAP https://github.com/colmap/colmap/releases/tag/3.9.1 下载完成需要添加环…

基于Springboot框架班级综合测评管理系统的设计与实现

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Springboot框架&#xff0c;B/S模式 工具&#xff1a;MyEclipse 系统展示 首页…

Go 并发控制:RWMutex 实战指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

《地下城与勇士》新手攻略,开荒必备!云手机多开教程!

《地下城与勇士》&#xff08;DNF&#xff09;是一款广受欢迎的多人在线动作角色扮演游戏。玩家将在游戏中扮演不同职业的角色&#xff0c;通过打怪、做任务、PK等方式不断提升自己&#xff0c;探索广阔的阿拉德大陆。游戏中设有丰富的副本、装备、技能系统&#xff0c;玩家可以…

重磅!草料模板库更新,新增签到报名和旅游模板

本次共更新5个签到报名场景模板&#xff0c;以及6个旅游场景模板。 所有模板内容均可自定义修改&#xff0c;并可免费使用。 签到报名场景 签到报名场景更新了 活动报名、大型活动会议报名、展会邀请函、专题讲座活动报名和技能培训邀约报名 5个模板&#xff0c;基于不同的会…

6.13.1 使用残差神经网络堆叠集成进行乳腺肿块分类和诊断的综合框架

计算机辅助诊断 (CAD) 系统需要将肿瘤检测、分割和分类的自动化阶段按顺序集成到一个框架中&#xff0c;以协助放射科医生做出最终诊断决定。 介绍了使用堆叠的残差神经网络 (ResNet) 模型&#xff08;即 ResNet50V2、ResNet101V2 和 ResNet152V2&#xff09;进行乳腺肿块分类…

基于自编码器的心电图信号异常检测(Python)

使用的数据集来自PTB心电图数据库&#xff0c;包括14552个心电图记录&#xff0c;包括两类&#xff1a;正常心跳和异常心跳&#xff0c;采样频率为125Hz。 import numpy as np np.set_printoptions(suppressTrue) import pandas as pd import matplotlib.pyplot as plt import…

reverse-android-淘最热点so

资源 1. com.maihan.tredian 2021版 淘最热点 2. 该 app 没有加壳 ,也没混淆。 登录抓包 POST: https://api.taozuiredian.com/api/v1/auth/login/sms POST /api/v1/auth/login/sms HTTP/1.1 Content-Type: application/json Connection: close Charset: UTF-8 User-Agen…

RabbitMQ实践——在Ubuntu上安装并启用管理后台

大纲 环境安装启动管理后台 RabbitMQ是一款功能强大、灵活可靠的消息代理软件&#xff0c;为分布式系统中的通信问题提供了优秀的解决方案。无论是在大规模数据处理、实时分析还是微服务架构中&#xff0c;RabbitMQ都能发挥出色的性能&#xff0c;帮助开发者构建高效、稳定的系…

夏季河湖防溺水新举措:EasyCVR+AI视频智能监控系统保障水域安全

近日一则新闻引起大众关注&#xff0c;有网友发布视频称&#xff0c;假期在逛西湖时&#xff0c;发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内&#xff0c;沿湖救生员成功将落水游客救到了岸边。 随着夏季的到来&#xff0c;雨水增多&#xff0c;各危险水域水位…

Windows添加用户

以管理员身份进入CMD命令中心&#xff0c;执行以下命令&#xff1a; // net user 用户名 密码 /add net user admin 123456 /add 执行完成会已添加该用户名&#xff0c;可在系统设置中查看更改

免费插件集-illustrator插件-Ai插件-批量加边框

文章目录 1.介绍2.安装3.通过窗口>扩展>知了插件4.功能解释5.总结 1.介绍 本文介绍一款免费插件&#xff0c;加强illustrator使用人员工作效率&#xff0c;进行批量加边框处理。首先从下载网址下载这款插件 https://download.csdn.net/download/m0_67316550/87890501&am…