初探工厂抽象模式

设计模式的-工厂模式

工厂模式之抽象类

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…

数据溢出导致的pthread_cond_timedwait工作异常

struct timespec ts; int rc; clock_gettime(CLOCK_MONOTONIC, &ts); ts.tv_nsec 300000000;//tv_nsec的最大值是999999999&#xff0c;这里直接加300毫秒&#xff0c;大概率会溢出&#xff0c;如果溢出应该把ts.tv_sec加1。 pthread_mutex_lock(&mutex_data_); …

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…

京准电钟 | NTP网络时间同步协议原理及其应用介绍

京准电钟 | NTP网络时间同步协议原理及其应用介绍 京准电钟 | NTP网络时间同步协议原理及其应用介绍 摘 要:首先对计算机网络时间同步相关技术进行了介绍,然后阐述了时间同步技术在现代计算机网络中的 应用与发展,最后指出时间同步网络在下一代网络(NGN) 中的重要地位。 随着…

Linux--(三)MQTT协议参数

一、QoS QoS 是 Quality of Service 的缩写&#xff0c;所以中文名便是服务质量。一个物联网通信中有些信息非常重要&#xff0c;我们需要确保这类重要信息可以准确无误的发送和接收&#xff0c;而有些信息则相对不那么重要&#xff0c;这类信息如果在传输中丢失不会影响系统…

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

对于大部分制造业企业&#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;一款高效、便捷的清洁工具就显得尤为重…

Antdv 备忘

www.antdv.com 1. <a-select 默认选中&#xff1a; <a-select :value"refreshInterval" 2.使用Drawer (单独页面方式) <template> <a click"changeTheme" style"padding-right: 20px">切换主题</a> <SettingD…

数据预处理之基于聚类的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…