设计模式:组合模式 职责链模式

组合模式 职责链模式

组合模式

组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。 在组合模式的树形结构中,所有的节点都类似于继承了一个抽象类一样,需要实现同样名字的一个方法。

鉴于js没有抽象类这玩意;所以这个同名方法只能约定了。假如就约定为execute好了。

var BigCommand = function () {
  this.commands = [];
}

BigCommand.prototype.add = function (command) {
  this.commands.push(command);
}

BigCommand.prototype.execute = function () {
  for (var i = 0; i < this.commands.lenth; i++) {
    var command = this.commands[i];
    command.execute();
  }
}

var bigCommand = new BigCommand();

var Command = function () { }
Command.prototype.execute = function () {
  throw new Error("需要实现execute方法")
}

上诉代码,我们可以通过BigCommand生成一个组合对象,通过Command生成一个小对象。通过bigCommand.add(command),我们将叶子对象推入组合对象;组合对象也可以推入组合对象。这样代码就分离成几个部分了。

职责链模式

职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。

既然说是链了,必然有链表的数据结构在其中。鉴于js的异步特性,并不适合用单纯的一个指针来指着下一环;用cb()是更好的选择。

var Chain = function (fn) {
  this.fn = fn
  this.next = null;
} 

Chain.prototype.setNext = function (fn) {
  return this.next = fn;
}

Chain.prototype.execute = function () {
  return this.fn.apply(this, arguments);
}

Chain.prototype.cb = function () {
  return this.next && this.next.apply(this.next, arguments);
}

最后写完发现职责链模式就是个流程控制嘛……还不如直接写流程控制……

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,802评论 0 14
  • javascript设计模式与开发实践 设计模式 每个设计模式我们需要从三点问题入手: 定义 作用 用法与实现 单...
    穿牛仔裤的蚊子阅读 4,291评论 0 13
  • 链接:https://github.com/WiKi123/DesignPattern作者: WiKi123(gi...
    树懒啊树懒阅读 3,670评论 0 2
  • 真诚的,TNANKS。 个人Github-23种设计模式案例链接 创建型模式 工厂模式 工厂模式(Factory ...
    水清_木秀阅读 26,223评论 11 204
  • 所谓“我爱你” 周星驰:我养你啊! 苏轼:不思量,自难忘。 黄伟文:余生请你指教。 王家卫:那一刻,我很暖。 夏目...
    青灰摇阅读 106评论 0 0