设计模式学习--组合模式
2016-05-03 00:03
155 查看
组合模式:将对象组合成树形结构以表示"部分-整体"的层次结构,组合模式使用用户对单个对象和组合对象的使用具有一致性
但需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了
基本对象可以被组合成更负责的组合对象,而这个组合对象又可以被组合,这样不断递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了
优点:组合模式可以清楚的定义分层次的复杂对象,表示对象的全部或部分层次,他让高层模块忽略的层次的差异,方便对整个层次结构进行控制
高层模块可以一致的使用一个组合结构或者其中单个对象,不必关系处理的是单个对象还是整个组合结构,简化了高层模块的代码
在组合模式中增加新的枝干结构和叶子构件都很方便,无需对现有类进行任何修改,
组合模式为树形结构的面相对象实现提供了一种灵活的解决方案,通过叶子对象和枝干对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单
缺点是在新增构件时不好对枝干中的构件类型进行限制,不能依赖类型系统来施加这些约束,因为在大对数情况下,他们都来自于相同的抽象层,此时,必须进行类型检查来实现,这个实现过程较为复杂,
但需求中是体现部分与整体层次的结构时,以及希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑用组合模式了
基本对象可以被组合成更负责的组合对象,而这个组合对象又可以被组合,这样不断递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了
优点:组合模式可以清楚的定义分层次的复杂对象,表示对象的全部或部分层次,他让高层模块忽略的层次的差异,方便对整个层次结构进行控制
高层模块可以一致的使用一个组合结构或者其中单个对象,不必关系处理的是单个对象还是整个组合结构,简化了高层模块的代码
在组合模式中增加新的枝干结构和叶子构件都很方便,无需对现有类进行任何修改,
组合模式为树形结构的面相对象实现提供了一种灵活的解决方案,通过叶子对象和枝干对象的递归组合,可以形成复杂的树形结构,但对树形结构的控制却非常简单
缺点是在新增构件时不好对枝干中的构件类型进行限制,不能依赖类型系统来施加这些约束,因为在大对数情况下,他们都来自于相同的抽象层,此时,必须进行类型检查来实现,这个实现过程较为复杂,
相关文章推荐
- PHP创建/删除/复制文件夹、文件
- JS基于clipBoard.js插件实现剪切、复制、粘贴
- jQuery代码实现对话框右上角菜单带关闭×
- 前端jquery部分很精彩
- 深入浅析Bootstrap列表组组件
- 原生JS封装Ajax插件(同域、jsonp跨域)
- javascript的BOM
- Bootstrap与KnockoutJs相结合实现分页效果实例详解
- jquery对象访问是什么及使用方法介绍
- JQuery核心函数是什么及使用方法介绍
- 个人网站留言页面(前端jQuery编写、后台php读写MySQL)
- JQuery的Pager分页器实现代码
- 基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
- 小白谈谈对JS原型链的理解
- 聊一聊JavaScript作用域和作用域链
- JavaScript的MVVM库Vue.js入门学习笔记
- jQuery的promise与deferred对象在异步回调中的作用
- 详解JavaScript异步编程中jQuery的promise对象的作用
- 浅析函数声明和函数表达式――函数声明的声明提前
- 深入解析jQuery中Deferred的deferred.promise()方法