设计模式 -- 组合模式 (Composite Pattern)
定义:
对象组合成部分整体结构,单个对象和组合对象具有一致性。
看了下大概结构就是集团总公司和子公司那种层级结构。
实现树状嵌套结构。
角色介绍:
Component :抽象根节点:其实相当去总公司,抽象子类共有的方法;
Composite :相当于总公司的智能部门,也分管子公司,通过集合存储子节点对象,提供增删获取子节点对象的方法;
leaf:子节点,相当于集团子公司,总公司具有的智能,子公司也具有,因此子节点具有总节点拥有的所有抽象方法以及提供给子类的方法。
Client:通过抽象跟节点操作子节点的对象。
public abstract class Component {
protected String name;
public Component(String name) {
this.name = name;
}
public abstract void doSomething();
}
import java.util.ArrayList;
import java.util.List; /**
* 具体枝干节点
* Created by Administrator on 2016/9/3.
*/
public class Composite extends Component {
private List<Component> components = new ArrayList<>(); public Composite(String name) {
super(name);
} //新增子公司
public void addChild(Component component) {
components.add(component);
} //撤除子公司
public void remove(Component component) {
components.remove(component);
} //获取某个子公司对象信息
public void getChild(int index) {
components.get(index);
} @Override
public void doSomething() {
System.out.println(name);
for (int i = 0; i < components.size(); i++) {
components.get(i).doSomething();
}
}
}
public class Leaf extends Component {
public Leaf(String name) {
super(name);
}
//相当于输出子公司名称
@Override
public void doSomething() {
System.out.println(name);
}
}
运行结果:
public class Test {
public static void main(String[] args) {
Composite composite = new Composite("composite");
Composite composite1 = new Composite("composite1");
Composite composite2 = new Composite("composite1");
Leaf leaf = new Leaf("leaf1");
Leaf leaf2 = new Leaf("leaf2");
composite1.addChild(leaf);
composite2.addChild(leaf2);
composite.addChild(composite1);
composite.addChild(composite2);
composite.doSomething();
}
}
实际项目中的使用:
- 比如对sd卡文件和文件夹的操作上其实就可以使用该设计模式:
- 定义一个抽象类表示文件和文件夹,包含对文件增加,删除,遍历的抽象方法;
- 文件夹类继承自1中的抽象类,并实现抽象类中的抽象方法;
- 文件类继承自1中的抽象类,并实现抽象类中的抽象方法;
android源码里面使用到组合模式就是View和ViewGroup的嵌套组合。
还是很粗糙,以后使用过程中慢慢体会吧
设计模式 -- 组合模式 (Composite Pattern)的更多相关文章
- 浅谈设计模式--组合模式(Composite Pattern)
组合模式(Composite Pattern) 组合模式,有时候又叫部分-整体结构(part-whole hierarchy),使得用户对单个对象和对一组对象的使用具有一致性.简单来说,就是可以像使用 ...
- 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释
组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...
- C#设计模式——组合模式(Composite Pattern)
一.概述 在软件开发中,我们往往会遇上类似树形结构的对象体系.即某一对象既可能在树形结构中作为叶节点存在,也可能作为分支节点存在.比如在文件系统中,文件是作为叶节点存在,而文件夹就是分支节点.在设计这 ...
- 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...
- 设计模式系列之组合模式(Composite Pattern)——树形结构的处理
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 二十四种设计模式:组合模式(Composite Pattern)
组合模式(Composite Pattern) 介绍将对象组合成树形结构以表示"部分-整体"的层次结构.它使得客户对单个对象和复合对象的使用具有一致性.示例有一个Message实体 ...
- 【设计模式】组合模式 Composite Pattern
树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承 ...
- python 设计模式之组合模式Composite Pattern
#引入一 文件夹对我们来说很熟悉,文件夹里面可以包含文件夹,也可以包含文件. 那么文件夹是个容器,文件夹里面的文件夹也是个容器,文件夹里面的文件是对象. 这是一个树形结构 咱们生活工作中常用的一种结构 ...
- 设计模式-12组合模式(Composite Pattern)
1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...
随机推荐
- Redis .NET开源组件Beetle.Redis
Redis .NET开源组件Beetle.Redis Beetle.Redis是一款开源的Redis Client for .net组件,它提供非常简便的操作方式可以让开发人员轻松地访问Redis,同 ...
- C#做的颜色工具
常常会用到绘制以及配色,每次看到 framework 里边的 KnowColor.xxx 我就一阵......到底啥颜色啊,干脆做一个一劳永逸的工具吧.功能包含: 可以实现枚举所有系统颜色 圆形.矩形 ...
- T-SQL 随机返回特定行数据和分页查询
T-SQL 随机返回特定行数据和分页查询 T-SQL 语言相较于标准SQL添加了很多特性,为了提高SQL Server的表现,是有必要深入了解的,面试时一般也会包含这两个小问题. 首先,是在一个Adv ...
- IOS学习之路五(代码实现UITableView)
先展示一下运行结果: 代码实现: 1.先创建一个空项目: 2.创建一个Controller:(TableViewController) 在AppDelegate.h中声明属性: // AppDele ...
- Unicode(UTF&UCS)深度历险
Unicode(UTF&UCS)深度历险 计算机网络诞生后,大家慢慢地发现一个问题:一个字节放不下一个字符了!因为需要交流,本地化的文字需要能够被支持. 最初的字符集使用7bit来存储字符,因 ...
- ASP.NET MVC3开发 - CodeFisrt数据库篇之M层验证之调用远程方法(Remote)验证
本文讲述在作者在使用.net mvc3进行开发的时候用到的两种调用远程验证的方法,第一种方法比较傻瓜,第二种方法方便好用,调用远程验证是个比较常见的验证方法,比如注册用户时的用户名唯一性验证. 作者原 ...
- iOS多线程的初步研究3
iOS多线程的初步研究(三) 弄清楚NSRunLoop确实需要花时间,这个类的概念和模式似乎是Apple的平台独有(iOS+MacOSX),很难彻底搞懂(iOS没开源,呜呜). 官网的解释是说run ...
- Matlab下多径衰落信道的仿真
衰落信道参数包括多径扩展和多普勒扩展.时不变的多径扩展相当于一个延时抽头滤波器,而多普勒扩展要注意多普勒功率谱密度,通常使用Jakes功率谱.高斯.均匀功率谱. 多径衰落信道由单径信道叠加而成,而单径 ...
- 《.NET 编程结构》专题汇总
<.NET 编程结构>专题汇总 前言 掌握一门技术,首要的是掌握其基础. 笔者从事.NET相关开发多年,也非常喜欢.NET,多年来也积累了很多相关的资料,在此将一些基础性的 ...
- 一个基于STSdb和fastJson的磁盘/内存缓存
一个基于STSdb和fastJson的磁盘/内存缓存 需求 业务系统用的是数据库,数据量大,部分只读或相对稳定业务查询复杂,每次页面加载都要花耗不少时间(不讨论异步),觉得可以做一下高速缓存,譬如用n ...