JavaScript设计模式——建造者模式

CSDN话题挑战赛第2期
参赛话题:学习笔记

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。这个过程中,我们去记录思考的过程,便于日后复习,梳理自己的思路。学习之乐,独乐乐,不如众乐乐,把知识讲给更多的人听,何乐而不为呢?

建造者模式

把一个复杂对象的分离层和表示层分离,同样的构建过程可以采用不同的表示

应用场景

当一个构造函数的参数较多时使用,根据参数进行分类然后分别构建各个部分,最后挂载到对象的属性上。

实例:候选人

候选人对象具有人的基础属性,例如:姓名、年龄等,除了基础属性外还有工作属性。
工作属性还有其他的属性,例如:工作名称、种类、描述等。

为了简化候选人的构造,将其基础属性和工作属性分开,分别构建。以后需要扩展时也可以分别扩展互不影响。

function Candidate(param) {
  let _candidate = new Person(param);
  _candidate.work = new CreatedWork(param.work);
  return _candidate;
}

function Person(param) {
  this.name = param.name;
  this.age = param.age;
}

function CreatedWork(work) {
  switch (work) {
    case 'engineer':
      this.name = '工程师';
      this.description = '热爱编程';
      break;
    case 'teacher':
      this.name = '老师';
      this.description = '乐于分享';
      break;
    default:
      this.name = param.work;
      this.description = '无';
      break;
  }
}

CreatedWork.prototype.changeWork = function (work) {
  this.name = work;
}

CreatedWork.prototype.changeDes = function (des) {
  this.description = des;
}

优缺点

优点

  • 建造者模式的封装性很好:使用建造者模式可以有效地封装变化,在使用建造者模式的场景中,一般产品和建造这类是比较稳定的,因此,将主要的业务逻辑封装在指挥者类中对整体而言,可以取得较好的稳定性
  • 在建造者模式中,客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程结构,使得相同的创建过程可以创建不同的产品对象
  • 可以更加精细地控制产品的创建过程:将复杂产品的创建步骤分解在不同的方法中,使得创建过程更加清晰,也更加方便使用程序来控制创建过程
  • 建造者模式很容易进行扩展:如果有新的需求,通过实现一个新的建造这类就可以完成,基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险,符合开闭原则

缺点

建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值