定义

建造这模式 又名生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象

建造者模式 是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。

建造者模式优点

  • 客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。
  • 每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者, 用户使用不同的具体建造者即可得到不同的产品对象 。
  • 可以更加精细地控制产品的创建过程 。将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更方便使用程序来控制创建过程。
  • 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合 “开闭原则”

建造者模式的缺点

  • 增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合 “开闭原则”
  • 产品内部变化很复杂的情况: 如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
        // 我们要建造一个人的信息,包括基本信息,岗位信息,部门信息, 考勤信息。// 要求我们算出这个人的每月工资// 工资基本构成// 岗位等级 1=>1000,2=>2000,3=>3000// 出勤一天100// 请假一天扣100// 请算出小明,年龄=>20,性别=>男,住址=>河北省,岗位=>前端开发,等级=>2,// 部门=>网络部,出勤=>25天,请假=>5天,扣款=>300class People {// 基本信息basic({name, age, gender, address}) {this.name = name; // 姓名this.age = age;  // 年龄this.gender = gender; // 性别this.address = address; // 住址}// 岗位信息jobsInfo({jobs, level}) {this.jobs = jobs; // 岗位this.level = level; // 等级}// 部门信息departmentInfo({department}) {this.department = department; // 部门}// 考勤信息attendanceInfo({attendanceDays, leaveDays}) {this.attendanceDays = attendanceDays; // 出勤天数this.leaveDays = leaveDays // 请假天数}// 工资信息wageInfo({deductions}) {this.deductions = deductions; // 扣款}}let _basic = {name:'小明',age:'20',gender:'男',address:'河北省'},_jobsInfo = {jobs:'前端开发',level:2},_departmentInfo = {department:'网络部'},_attendanceInfo = {attendanceDays:25,leaveDays:5},_wageInfo = {deductions:300}class Builders extends People{constructor(strategy) {super();this.basic(_basic);this.jobsInfo(_jobsInfo);this.departmentInfo(_departmentInfo);this.attendanceInfo(_attendanceInfo);this.wageInfo(_wageInfo);this.wageMoney =  strategy;}init(){return this.wageMoney.realWages();}}class Strategy extends Builders{constructor({jobsMoney, attendancMoney, leaveMoney, deductionsMoney}){super();this.wage = 0;this._jobsMoney = jobsMoney;this._attendancMoney = attendancMoney;this._leaveMoney = leaveMoney;this._deductionsMoney = deductionsMoney;}realWages(){this.jobsWage(this._jobsMoney)this.attendancWage(this._attendancMoney,this._leaveMoney);this.deductionsWage(this._deductionsMoney);return `姓名:${this.name},年龄:${this.age},住址:${this.address},岗位:${this.jobs},等级:${this.level},部门:${this.department},出勤:${this.attendanceDays},请假:${this.leaveDays},扣款:${this.deductions},工资${this.wage}`;}jobsWage(jobsMoney){// 等级工资this.wage += this.level * jobsMoney;console.log(this.wage,'等级')}attendancWage(attendancMoney,leaveMoney){// 全勤工资this.wage += this.attendanceDays * attendancMoney;this.wage = this.wage - this.leaveDays * leaveMoney;console.log(this.wage,'出勤')}deductionsWage(deductionsMoney){this.wage = this.wage - deductionsMoney;console.log(this.wage,'扣款')}}let peopleInfo = new Builders(new Strategy({jobsMoney:1000,attendancMoney:100,leaveMoney:100,deductionsMoney:300}));console.log(peopleInfo.init()) // 姓名:小明,年龄:20,住址:河北省,岗位:前端开发,等级:2,部门:网络部,出勤:25,请假:5,扣款:300,工资3700

转载于:https://www.cnblogs.com/mengxiangji/p/11070826.html

建造者模式加策略模式计算个人工资相关推荐

  1. 【设计模式2_工厂模式、策略模式】

    工厂模式 工厂模式与策略模式通常可以配合使用,成对出现,也是初学设计模式时常常分不清二者区别的原因. 简单工厂 业务场景需要根据传入的不同参数以获取对应的对象来处理各自的逻辑,很容易写出如下代码: v ...

  2. Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)

    目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...

  3. 策略模式、策略模式与Spring的碰撞

    策略模式是GoF23种设计模式中比较简单的了,也是常用的设计模式之一,今天我们就来看看策略模式. 实际案例 我工作第三年的时候,重构旅游路线的机票查询模块,旅游路线分为四种情况: 如果A地-B地往返都 ...

  4. 行为模式之策略模式的案例示范

    1. 策略模式介绍 策略模式是一种行为模式,也是替代大量ifelse的利器.它所能解决的场景,一般是具有同类可替代的行为逻辑算法场景.比如,不同类型的交易方式(信用卡.支付宝.微信).生成唯一ID策略 ...

  5. 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式(Factory pattern) 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是 ...

  6. 设计模式之模板方法模式、策略模式、命令模式、责任链模式、状态模式

    前言 本章节给您介绍23种设计模式的行为型模式中的模板方法模式.策略模式.命令模式.责任链模式.状态模式. 如有帮助记得3连 加 关注哦!欢迎品论去留言交流,谢谢阅读! 文章目录 前言 一.模板方法模 ...

  7. 拿捏大厂面试,设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用

    一.工厂模式 工厂模式又叫做工厂方法模式,是一种创建型设计模式,一般是在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型. 1.1 工厂模式介绍 工厂模式是Java 中比较常见的一种设计模式 ...

  8. 工厂模式和策略模式的综合使用

    目录 一.简单的工厂模式了解与使用 (一)基本概念理解 (二)简单工厂模式的认识和对应角色的分析 基本认识 角色理解 (三)使用场景和典型应用 二.简单的策略模式了解与使用 (一)基本概念理解 (二) ...

  9. 什么是策略模式?策略模式的使用场景以及优缺点?

    策略模式 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改.这种类型的设计模式属于行为型模式. 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变 ...

最新文章

  1. Spring Boot 最最最常用的注解梳理
  2. 二叉树的深度优先遍历和广度优先遍历
  3. c语言药房系统书写指导书,C语言药房管理系统[文书借鉴]
  4. php中0与NULL,False,“0”,\0的区别
  5. 树莓派也跑Docker和.NET Core
  6. ES6语法的学习与实践
  7. git 回滚 add 操作_炫技!git 优雅回滚一次错误的合并操作!
  8. 发布-订阅消息常用通信方式
  9. 合泰单片机c语言halt指令,holtek单片机图文全面详解
  10. python queue get 方法_Python语言中的Queue(队列)
  11. java EE设计模式--spring企业级开发最佳实践文摘
  12. 使用PDF Converter OCR for Mac如何区分扫描的PDF和普通文件?
  13. 企业 IT 架构转型之道 阿里巴巴中台战略思想与架构实战
  14. 笔记木计算机自动关机怎么办,为什么笔记本电脑自动关机 笔记本电脑自动关机解决方法...
  15. mysql的event_mysql中event的用法详解
  16. 磁盘列阵(RAID)
  17. 基于JAVA网上家教信息管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  18. Window Flag 含义
  19. 计算机桌面整理,电脑桌面太乱了怎么整理?
  20. 程序员如何正确的自我提升?

热门文章

  1. 达梦数据库DM8导出sql脚本
  2. 基于Vue框架的在线投票系统的设计与实现毕业设计-附源码221604
  3. 西电硕士论文latex使用说明
  4. 单点登录SSO,统一认证oAuth名词解释
  5. JS实现对联广告和弹窗广告代码,可同时关闭不随屏幕滚动
  6. java使用GDAL将shp文件转为geojson文件
  7. 购买食品要注意5原则。
  8. 高考满分作文 - 风沙渡
  9. getElementById和getElementByTagName的区别
  10. awstats分析nginx日志