设计模式之Composite
2019独角兽企业重金招聘Python工程师标准>>>
Composite定义:
顾名思义,该模式将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
Composite好处:
1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。
eg:
服务器端菜用继承方式取得父子类关系以便后面使用。
客户端代码
Cabinet cabinet=new Cabinet("Tower");
Chassis chassis=new Chassis("PC Chassis");
//将PC Chassis装到Tower中 (将盘盒装到箱子里)
cabinet.add(chassis);
//将一个10GB的硬盘装到 PC Chassis (将硬盘装到盘盒里)
chassis.add(new Disk("10 GB"));
//调用 netPrice()方法;
System.out.println("netPrice="+cabinet.netPrice());
System.out.println("discountPrice="+cabinet.discountPrice());
上面调用的方法netPrice()或discountPrice(),实际上Composite使用Iterator遍历了整个树形结构,寻找同样包含这个方法的对象并实现调用执行.
Composite模式,在实际应用中,如果碰到树形结构,就可以尝试是否可以使用这个模式。
在网上拷贝一个Jive的例子:
Jive解剖
在Jive中 ForumThread是ForumMessages的容器container(组合体).也就是说,ForumThread类似我们上例中的 CompositeEquipment.它和messages的关系如图:
[thread]
|- [message]
|- [message]
|- [message]
|- [message]
|- [message]
我们在ForumThread看到如下代码:
类似CompositeEquipment, 提供用于访问自己组合体内的部件方法: 增加 删除 遍历.
转载于:https://my.oschina.net/u/219582/blog/59458
设计模式之Composite相关推荐
- 设计模式之 Composite(组合)通俗理解
23种设计模式 1 Composite 模式定义 将对象以树形结构组织起来,以达成"部分-整体" 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性. Composite ...
- JAVA设计模式十七--Composite(组合模式)
组合模式 组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念 ,客户程序可以向处理简单元素一样来处理复杂元素,从而使 ...
- 设计模式学习-Composite(组合模式)
意图:将对象组合成树型结构以表示"部分-整体"的层次结构.Composite使得用户对于单个对象和组合对象的使用具有一致性 Compoite模式的关键是一个抽象类,即表示具体类也表 ...
- 设计模式之Composite模式(笔记)
组合模式:将对象组合成树形结构以表示"部分-总体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有一致性. 适用场合:当需求中是体现部分与总体层次的结构时,以及希望用户 ...
- Java 设计模式之 Composite 组合模式
Composite 组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...
- 设计模式---组合Composite模式
1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 在绘图编辑器和图形捕捉系统这样的图形应用程 ...
- C++设计模式之Adapter
一.功能 将一个类的接口转换成客户希望的另外一个接口,解决两个已有接口之间不匹配的问题.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 二.结构图 (1)class ad ...
- 12【组合设计模式】
文章目录 十二.组合设计模式 12.1 组合设计模式简介 12.1.1 组合设计模式概述 12.1.2 组合设计模式中的角色 12.2 组合设计模式的实现 12.2.1 透明组合模式 12.2.2 安 ...
- C++设计模式 温故知新李建忠(BooLan、GeekBand)
设计模式是前人的智慧和经验的总结,需要我们反复地学习.在实践中体会其蕴含的设计原则和设计思想.李老师按照封装变化将23种设计模式分成组件协作.单一职责.对象创建.对象性能.接口隔离.状态变化.数据结构 ...
最新文章
- CVPR 2020 Oral | 人脸识别Loss新突破: 旷视提出Circle Loss,革新深度特征学习范式...
- python从1到n出现了多少个1-【算法21】从1到n的正数中1的出现次数
- 如何利用传感器控制数据中心能耗
- 我的同事Leo做的一个AR增强现实的项目
- python把回车作为输入_python将回车作为输入内容的实例
- PyTorch | torch.linspace()创建均分数列张量 | torch.linspace()如何使用?| torch.linspace()使用方法 | torch.linspace例子
- Centos升级安装.Net core 1.1
- vscode占用C盘空间迁移到其他盘
- Excel 技术篇-使用excel启用宏提示:“可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用“问题解决方法
- 理解浏览器的历史记录
- ./configure, make, sudo make install 的含义
- 数据传输速率:传码速率(波特率)、传信速率(比特率)
- 西门子服务器提升抱闸信号不输出,SINAMICS V90伺服抱闸接线及配置详解
- 【面向对象初步】之面向对象VS面向过程
- Wrashall算法,自反性,对称性的实现
- 线代 | 考研线性代数 解题方法汇总(非知识点汇总)
- “超越巴菲特计划“之股市小知识常用的术语笔记
- AES-GCM加密算法的简单介绍
- 基于vue焕心眼镜商城的设计与实现毕业设计源码091546
- 华为C/C++笔试题(附答案,华为面试题系列)
热门文章
- Could not load type 'System.Web.Mvc.ViewPagedynamic' in asp.net mvc2 after publishing the website
- 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!)
- Rsync 基本安装及同步(一)
- Flutter 在铭师堂的实践
- 学习的一周?【8.5进度报告】
- 【uoj#225】[UR #15]奥林匹克五子棋 构造
- Hosts文件实际应用 配置内部服务器提高访问效率和速度
- Java中集合删除元素时候关于ConcurrentModificationException的迷惑点
- php integer
- 利用Delphi的File Of Type创建并管理属于你自己的数据库