javascript设计模式之建造者
工厂模式不关心过程,只关心结果,这与建造者相反,建造者更关心的是过程,
这里我们创建一个基类,其拥有技能跟爱好两个属性,还有两个实例方法用来获取技能跟爱好
// 基类
let Human = function (param = {}) {this.skill = param.skill || "保密"this. Hobby = param.hobby || "无"
}
// 基类原型
Human.prototype = {getSkill() {return this.skill},getHobby() {return this. Hobby}
}
接下来创建一个姓名类及工作类
let Named = function (name = "") {let _this = this(function (name, self) {self.name = nameif (name.indexOf(" ") !== -1) {self.firstName = name.slice(0, name.indexOf(" "))self.lastName = name.slice(name.indexOf(" "))}})(name, _this)
}let Work = function (work = "") {let _this = this(function (work, self) {self.work = workswitch (work) {case "code":self.work = "工程师"self.description = "每天沉醉于编程的工程师"breakcase "UI":case "UE":self.work = "设计师"self.description = "UI和UE的设计"breakdefault:self.work = workself.desc = "unknown"}})(work, _this)
}Work.prototype.changeWork = (work)=> {this.work = work
}
Work.prototype.changeDescription = (description) => {this.description = description
}
这样我们就得到了姓名跟工作的类,再来创造一个应聘者:
/* 构建者* @param {string} name 姓名* @param {string} work 工作*/
let Person = function (name, work) {let _person = new Human()_person.name = new Named(name)_person.work = new Work(work)return _person
}// 这样使用
let person = new Person("于光豪", "code")
console.log(person.work.description) // 每天沉醉于编程的工程师
person.work.changeDescription('不要想着工程师很轻松!')
console.log(person.work.description) // 不要想着工程师很轻松!
console.log(person.name.name) // 于光豪
由此可以看出在构建者中,创建者不单单是在乎结果,更关注过程,构建的对象来说更为复杂,工作通过 Switch 来区分不同的工作种类,对于不同的职位进行不同的操作。不过针对工厂模式来说,构建者的确更明确一些,它将所有功能等都逐一分开,每个都独立,再通过一个构建者将所有的基层都融合在一起(Person)构建者融合了 Human、Named、Work,类似与搭建积木,一层一层的构建起来组合成一个模型
相关文章:
javascript设计模式之建造者
工厂模式不关心过程,只关心结果,这与建造者相反,建造者更关心的是过程, 这里我们创建一个基类,其拥有技能跟爱好两个属性,还有两个实例方法用来获取技能跟爱好 // 基类 let Human function (param {}) …...
安擎科技携手华为云区块链共同打造安全天空
当前,低空经济崛起,无人机多并发、混合运行时引发的网络信息安全、空域安全问题已成行业首要课题。 在2024年1月正式实施的《民用无人驾驶航空器运行安全管理规则》(CCAR-92)第549条中规定,“无人驾驶航空器航行服务提…...
学习数据结构的第一天
结构体 如何定义结构体 1、先定义结构体类型,再定义结构体类型变量 struct student/定义学生结构体类型/ { long number; char name[20]; char sex; int age; float score[3];/三科考试成绩/ }2、定义结构体类型同时定义结构体类型变量 struct student/定义学生结…...
5.electron之主进程起一个本地服务
如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…...
爬取58二手房并用SVR模型拟合
目录 一、前言 二、爬虫与数据处理 三、模型 一、前言 爬取数据仅用于练习和学习。本文运用二手房规格sepc(如3室2厅1卫)和二手房面积area预测二手房价格price,只是练习和学习,不代表任何实际意义。 二、爬虫与数据处理 import requests import cha…...
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、RichText组件 鸿蒙(HarmonyOS)富文本组件,…...
7.electron之渲染线程发送事件,主进程监听事件
如果可以实现记得点赞分享,谢谢老铁~ Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 Electron 将 Chromium 和 Node.js 嵌入到了一个二进制文件中,因此它允许你仅需一个代码仓库,就可以撰写支持 Windows、…...
thinkphp6入门(19)-- 中间件向控制器传参
可以通过给请求对象赋值的方式传参给控制器(或者其它地方),例如 <?phpnamespace app\middleware;class Hello {public function handle($request, \Closure $next){$request->hello ThinkPHP;return $next($request);} } 然后在控制…...
Flink Format系列(2)-CSV
Flink的csv格式支持读和写csv格式的数据,只需要指定 format csv,下面以kafka为例。 CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3) ) WITH (connector kafka,topic user_behavior…...
Spring Data Envers 数据审计实战2 - 自定义监听程序扩展审计字段及字段值
上篇讲述了如何在Spring项目中集成Spring Data Envers做数据审计和历史版本查看功能。 之前演示的是业务表中已有的字段进行审计,那么如果我们想扩展审计字段呢? 比如目前对员工表加入了Audited审计,员工表有个字段为dept_id,为…...
一个 SpringBoot 项目能同时处理多少请求?
目录 1 问题分析 2 Demo 3 答案 4 怎么来的? 5 标准答案及影响参数一Tomcat配置 6 影响参数二 Web容器 7 影响参数三 Async 1 问题分析 一个 SpringBoot 项目能同时处理多少请求? 不知道你听到这个问题之后的第一反应是什么? 我大概…...
计算机网络——网络
计算机网络——网络 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU)前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家, [跳转到网站](https://www.captainbed.cn/qianqiu) 无线网络和移动网…...
C语言探索:选择排序的实现与解读
当我们需要对一组数据进行排序时,选择排序(Selection Sort)是一种简单但效率较低的排序算法。它的基本思想是每次从未排序的数据中选择最小(或最大)的元素,然后将其放置在已排序序列的末尾。通过重复这个过…...
Golang 学习(二)进阶使用
二、进阶使用 性能提升——协程 GoRoutine go f();一个 Go 线程上,可以起多个协程(有独立的栈空间、共享程序堆空间、调度由用户控制)主线程是一个物理线程,直接作用在 cpu 上的。是重量级的,非常耗费 cpu 资源。协…...
ubuntu22.04@laptop OpenCV定制化安装
ubuntu22.04laptop OpenCV定制化安装 1. 源由2. 默认配置3. 定制配置4. 定制安装5. 定制OpenCV-4.9.05.1 修改opencv.conf5.2 加载so文件5.3 修改bash环境变量5.4 增加pkgconfig5.5 检查OpenCV-4.9.0安装 6. 总结7. 参考资料 1. 源由 目前,能Google到的代码层次不齐…...
linux系统非关系型数据库redis
redis 介绍redis的特点:缓存 安装安装单机版redisredis的相关工具 介绍 redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库 redis的官网:redis.ioredis的特点: 丰富的数据结构 支持持久化 支持事务 支持主从缓存 类型 …...
【LeetCode: 292. Nim 游戏+ 博弈问题】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
Android 9.0 禁用adb reboot recovery命令实现正常重启功能
1.前言 在9.0的系统rom定制化开发中,在定制recovery模块的时候,由于产品开发需要要求禁用recovery的相关功能,比如在通过adb命令的 adb reboot recovery的方式进入recovery也需要实现禁用,所以就需要了解相关进入recovery流程来禁用该功能 2.禁用adb reboot recovery命…...
分析网站架构:浏览器插件
一、Wappalyzer 1.1 介绍 Wappalyzer 是一款用于识别网站所使用技术栈的浏览器插件。它能够分析正在浏览的网页,检测出网站所使用的各种技术和框架,如内容管理系统(CMS)、JavaScript库、Web服务器等。用户只需安装 Wappalyzer 插…...
CentOS7搭建Hadoop集群
准备工作 1、准备三台虚拟机,参考:CentOS7集群环境搭建(3台)-CSDN博客 2、配置虚拟机之间免密登录,参考:CentOS7集群配置免密登录-CSDN博客 3、虚拟机分别安装jdk,参考:CentOS7集…...
从零搭建AI应用前端:微信小程序调用Qwen1.5-1.8B GPTQ模型API
从零搭建AI应用前端:微信小程序调用Qwen1.5-1.8B GPTQ模型API 最近在折腾一个挺有意思的项目,想给朋友做个能聊天的AI小程序。后端我选了个轻量但能力不错的模型——Qwen1.5-1.8B GPTQ,部署在星图GPU平台上,API接口已经调通了。接…...
3大核心模块构建戴森球计划模块化生产体系:从混乱到有序的进阶指南
3大核心模块构建戴森球计划模块化生产体系:从混乱到有序的进阶指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 概念解析:模块化生产的本质与价值…...
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南
3个步骤掌握AI音乐创作:语音模型驱动的开源工具实践指南 【免费下载链接】AICoverGen A WebUI to create song covers with any RVC v2 trained AI voice from YouTube videos or audio files. 项目地址: https://gitcode.com/gh_mirrors/ai/AICoverGen AI翻…...
ubuntu20.04设置开机自动登录适用与GNOME桌面环境
默认arm版本ubuntu20.04未安装nano编辑器,so我们要安装一下, sudo apt update && sudo apt install nano设置方法: sudo nano /etc/gdm3/custom.conf添加或修改,用户名区分大小写。 AutomaticLoginEnableTrue AutomaticLo…...
WarcraftHelper终极指南:解锁魔兽争霸3现代硬件潜力的完整方案
WarcraftHelper终极指南:解锁魔兽争霸3现代硬件潜力的完整方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经典的即时战…...
Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率
Qwen3-32B-Chat中文优化:提升OpenClaw本地任务理解准确率 1. 为什么需要优化本地模型的中文理解能力 去年冬天,当我第一次尝试用OpenClaw自动化整理电脑上的文件时,遇到了一个令人哭笑不得的场景。我对它说"把上周下载的PDF文件按日期…...
保姆级图解:FD-SOI工艺流程中的关键三步(外延生长、应变硅、HKMG)
保姆级图解:FD-SOI工艺流程中的关键三步(外延生长、应变硅、HKMG) 在智能手机处理器和自动驾驶芯片的制造中,FD-SOI技术正凭借其独特的性能优势成为行业焦点。这项技术通过超薄绝缘层上硅(Ultra-Thin Body and Buried…...
COMSOL实战:从微波炉到压电泵的多物理场魔法
comsol软件教程,电热力耦合,动网格,传热,优化,微波加热,压电(非comsol官网搬运) comsol仿真教程,多物理场,建模仿真,低频电磁今天咱们来点硬核的—…...
以太网网络变压器:信号传输与隔离的关键设计
1. 以太网网络变压器的核心作用 第一次拆开路由器时,我盯着RJ45接口旁边那个黑色方块愣了半天——这玩意儿既不像电容也不像电感,后来才知道这就是网络变压器。别看它体积小,在百兆、千兆以太网中可是承担着信号传输和电气隔离的双重使命。 网…...
墨语灵犀模型压缩与量化教程:降低部署资源消耗
墨语灵犀模型压缩与量化教程:降低部署资源消耗 你是不是也遇到过这种情况:好不容易找到一个效果不错的开源大模型,比如墨语灵犀,兴致勃勃地想部署到自己的服务器上试试,结果一看显存要求,直接傻眼了——动…...
