javascript 设计模式之组合模式原理与应用详解

 更新时间:2020年04月08日 10:30:27   作者:Weiseditor  
这篇文章主要介绍了javascript 设计模式之组合模式原理与应用,结合实例形式分析了javascript组合模式基本概念、原理、应用场景及操作注意事项,需要的朋友可以参考下

本文实例讲述了javascript 设计模式之组合模式原理与应用。分享给大家供大家参考,具体如下:

组合模式说明

组合模式用于简单化,一致化对单组件和复合组件的使用;其实它就是一棵树;

这棵树有且只有一个根,访问入口,如果它不是一棵空树,那么由一个或几个树枝节点以及子叶节点组成,每个树枝节点还包含自己的子树枝以及子叶节点;

在面向对象编程中,叶子以及复杂对象(树枝节点)都继承一个接口或抽象类分别实现;

这个抽象定义一般三个部分组成,组件的基本信息,Add方法,Remove方法;

叶子节点只包含本身的数据,Add, Remove 基本为空操作;

树枝节点实现组件时,一般包含一个数组定义,用于存储子叶或树枝节点,还包括一个获取所有子节点的方法: 如GetList;

实例场景:

1>. 自然界中的各种树,树长在大地人,树头(树根),即是入口点,这棵树头向上生长,即有自己的叶子,又有自己的子树枝,某树枝还有自己的叶子,跟子树枝;

2>. 操作系统目录结构、公司部门组织架构、国家省市县、宇宙万物都有单独元物质以及物物包含的现象,像这么看起来复杂的现象,都可以使用组合模式,即部分-整体模式来操作;

一棵树:

 组合模式结构图:

实例源码

1. Component 组件;

function Component() {
  this.name = '';
}

Component.prototype = {
  Add: function(comp) {
    //rewrite
  },
  Remove: function(name) {
    //rewrite
  },
  set: function(name) {
    this.name = name;
  },
  operate: function() {
    //...
  }
}
var comp = new Component();

2. Leaf 叶子节点;

function Leaf() {
  
}

Leaf.prototype = Object.create(comp, {});

Leaf.prototype.get = function() {
  return this.name;
}

3. 树枝节点:

function Composite() {
  this.list = [];
}

Composite.prototype = Object.create(comp, {});

Composite.prototype = {
  Add: function(comp) {
    this.list.push(comp);
  },
  Remove: function(name) {
    for (i in this.list) {
      var cmp = this.list[i];
      if (cmp.name == name) {
        delete this.list[i];
        break;
      }
    }
  },
  operate: function() {
    //do...
  },
  getList: function(name) {
    var cmp;
    for (i in this.list) {
      cmp = this.list[i];
      if (cmp.name == name) {
        break;
      }
    }
    return cmp;
  }
}

叶子节点基本可以直接使用 Component 的结构,或是直接以 Component 来创建,Composite 树枝节点,就必须重写 Add , Remove, operate 等方法;

使用方法:

var root = new Composite();
root.set("root");

//叶子
var leaf = new Leaf();
leaf.set('顶级叶子');

root.Add(leaf);

//树枝节点;
var child = new Composite();
child.set('child');

var childschild = new Composite();
childschild.set('cchild');

child.Add(childschild);

root.Add(child);

root.operate();

其他说明

组合模式,是一种结构型的设计模式,主要用于一致化处理简单元素和复杂元素操作,使得客户端使用可以与复合结构复杂的情况相解藕;客户端使用时,搜索递归到需要的节点或位置,都可以使用统一方法,不管是叶子节点或是树枝节点进行一致操作;在面向对象动态语言里,其实Javascript 也差不多,就可以无需知道元素结构,进行查询,添加,删除的操作;

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • 判断横屏竖屏(三种)

    判断横屏竖屏(三种)

    本文主要介绍了通过HTML,CSS,JS三种判断横屏竖屏的方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • JavaScript获取当前时间戳5种方法汇总

    JavaScript获取当前时间戳5种方法汇总

    很多时候我们都把时间戳作为id值,下面这篇文章主要给大家介绍了关于JavaScript获取当前时间戳的5种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 15分钟深入了解JS继承分类、原理与用法

    15分钟深入了解JS继承分类、原理与用法

    这篇文章主要介绍了JS继承分类、原理与用法,结合实例形式较为详细的总结分析了javascript原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和寄生组合式继承等相关原理及使用方法,需要的朋友可以参考下
    2019-01-01
  • 自己使用js/jquery写的一个定制对话框控件

    自己使用js/jquery写的一个定制对话框控件

    自己做一个通用的控件,虽然不是绝对通用啦,但在我这个项目里还是可以随意调用的,思想的话也可以借鉴到别的项目中
    2014-05-05
  • JS实现固定时间点执行某任务的代码示例

    JS实现固定时间点执行某任务的代码示例

    在Web前端开发中,有时我们需要在特定的时间点执行某些任务,例如每日定时发送数据报告、每小时更新一次用户界面等,JavaScript 提供了多种方法来实现这一需求,本文将详细介绍如何使用这些工具和技术,并通过丰富的代码示例展示其具体应用,需要的朋友可以参考下
    2025-02-02
  • JavaScript读二进制文件并用ajax传输二进制流的方法

    JavaScript读二进制文件并用ajax传输二进制流的方法

    这篇文章主要介绍了JavaScript读二进制文件并用ajax传输二进制流的方法的相关资料,需要的朋友可以参考下
    2016-07-07
  • llqrcode js识别二维码解析二维码信息实例

    llqrcode js识别二维码解析二维码信息实例

    这篇文章主要为大家介绍了llqrcode js识别二维码解析二维码信息实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • js 实现 list转换成tree的方法示例(数组到树)

    js 实现 list转换成tree的方法示例(数组到树)

    这篇文章主要介绍了js 实现 list转换成tree的方法示例(数组到树),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • JavaScript 悬浮窗口实现代码

    JavaScript 悬浮窗口实现代码

    主要是window.onscroll的运用
    2009-02-02
  • javascript 作用于作用域链的详解

    javascript 作用于作用域链的详解

    这篇文章主要介绍了javascript 作用于作用域链的详解的相关资料,希望通过本文能帮助到大家,理解掌握这部分内容,需要的朋友可以参考下
    2017-09-09

最新评论