当前位置: 首页 > news >正文

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,类似与搭建积木,一层一层的构建起来组合成一个模型

http://www.lryc.cn/news/295515.html

相关文章:

  • 安擎科技携手华为云区块链共同打造安全天空
  • 学习数据结构的第一天
  • 5.electron之主进程起一个本地服务
  • 爬取58二手房并用SVR模型拟合
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之RichText组件
  • 7.electron之渲染线程发送事件,主进程监听事件
  • thinkphp6入门(19)-- 中间件向控制器传参
  • Flink Format系列(2)-CSV
  • Spring Data Envers 数据审计实战2 - 自定义监听程序扩展审计字段及字段值
  • 一个 SpringBoot 项目能同时处理多少请求?
  • 计算机网络——网络
  • C语言探索:选择排序的实现与解读
  • Golang 学习(二)进阶使用
  • ubuntu22.04@laptop OpenCV定制化安装
  • linux系统非关系型数据库redis
  • 【LeetCode: 292. Nim 游戏+ 博弈问题】
  • Android 9.0 禁用adb reboot recovery命令实现正常重启功能
  • 分析网站架构:浏览器插件
  • CentOS7搭建Hadoop集群
  • 10.0 Zookeeper 权限控制 ACL
  • 容器化技术基础概念:雪花服务器与凤凰服务器
  • 解决maven 在IDEA 下载依赖包速度慢的问题
  • 用python编写爬虫,爬取二手车信息+实验报告
  • 代码随想录算法训练营第二十九天|491.非递减子序列、46.全排列、47.全排列II
  • (2)(2.14) SPL Satellite Telemetry
  • OTG -- STM32 OTG驱动代码下载及简述(三)
  • STM32F407 CAN参数配置 500Kbps
  • python常用的深度学习框架
  • 将xyz格式的GRACE数据转成geotiff格式
  • 【机器学习】机器学习流程之收集数据