Java设计模式----组合模式(Composit )
1. 组合模式定义:
组合模式,又叫合成模式,有时又叫部分-整体模式,主要用来描述部分与整体的关系。
定义:将对象组合成树形结构以示“ 部分--整体 ”的层次结构,使得用户对单个对象的使用具有一致性。
2. 组合模式的3个对象:
a. Component 抽象构件角色
定义参加组合对象的共有的属性和方法,可以定义一些默认的行为或属性
b. Leaf 叶子构件
叶子对象,其下再无分支,也是遍历的最小单位
c. Composit 树枝构件
树枝对象,作用是组合树枝构件和叶子构件,形成树形结构
3. 组合模式通用示例代码:
Component类:
public abstract class Component {
//个体和整体都具有的共享
public void doSomething(){
System.out.println("大家都有的...");
}
}
NewLeaf 叶子构件类:
public class NewLeaf extends Component {
@Override
public void doSomething() {
super.doSomething();
System.out.println("叶子节点才有的.");
}
}
Composit 树枝构件类
public class Composit extends Component {
//构建容器
private ArrayList<Component> list=new ArrayList<Component>();
//增加一个叶子节点或树枝节点
public void add(Component com){
this.list.add(com);
}
//删除节点
public void remove(Component com){
this.list.remove(com);
}
//获得当前分支下的所有叶子节点和树枝节点
public ArrayList<Component> getChildren(){
return this.list;
}
}
测试代码:
public class Test {
public static void main(String[] args) {
//创建根节点
Composit root=new Composit();
root.doSomething();
//创建一个树枝节点
Composit branch=new Composit();
//创建一个叶子节点
NewLeaf leaf=new NewLeaf();
root.add(branch);
branch.add(leaf);
display(root);
}
public static void display(Composit root){
for (Component it : root.getChildren()) {
if(it instanceof NewLeaf){
it.doSomething();
}else{
display((Composit)it);
}
}
}
}
4. 组合模式的优点:
a. 高层模块调用简单
一棵树的所有节点都是Component,局部和整体对调用者来说并没有区别,也就是说,高层不必关心是在处理单个对象还是组合结构,简化了高层模块的代码。
b. 节点自由增加
如果要增加一个树枝节点或者树叶节点,只需要找到它的父节点即可。非常容易扩展,符合开闭原则。
5. 组合模式的缺点:
从测试类明显可以看出,在使用树叶和树枝定义时直接使用了实现类,而不是接口,与依赖倒置原则冲突!
6. 组合模式的使用场景:
a. 维护” 部分-整体“关系的场景,如树形菜单,文件和文件夹处理
b. 从一个整体中能够独立出部分模块和功能的场景
Java设计模式----组合模式(Composit )的更多相关文章
- Java设计模式——组合模式
JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...
- 【设计模式】Java设计模式 - 组合模式
Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...
- JAVA 设计模式 组合模式
用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构
- Java 设计模式 —— 组合模式
在现实生活中,存在很多"部分-整体"的关系,例如,大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.生活用品中的衣服与衣柜.以及厨房中的锅碗瓢盆等.在软件开发中也是 ...
- Java设计模式—组合模式
组合模式是一种常见的设计模式(但我感觉有点复杂)也叫合成模式,有时又叫做部分-整体模式,主要是用来描述部分与整体的关系. 个人理解:组合模式就是将部分组装成整体. 定义如下: 将对象组合成树形结构以表 ...
- Java设计模式-组合模式(Composite)
组合模式有时又叫部分-整体模式在处理类似树形结构的问题时比较方便,看看关系图: 直接来看代码: public class TreeNode { private String name; private ...
- Java设计模式---组合模式
一.组合模式定义 组合模式定义: Compose objects into tree structures to represent part-whole hierarchies. Composite ...
- 3.java设计模式-建造者模式
Java设计模式-建造者模式 在<JAVA与模式>一书中开头是这样描述建造(Builder)模式的: 建造模式是对象的创建模式.建造模式可以将一个产品的内部表象(internal repr ...
- 16. 星际争霸之php设计模式--组合模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
随机推荐
- sudo
sudo的目的:为非根用户授予根用户的权限: 配置文件:/etc/sudoers visudo命令编辑修改/etc/sudoers配置文件 1.一般用户赋权设置: [root@localhost ~] ...
- vmware shared holder 虚拟机设置共享目录
1, 安装 vm-tools http://askubuntu.com/questions/29284/how-do-i-mount-shared-folders-win7-host-in-ubunt ...
- BZOJ 2323 细胞(矩阵)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2323 题意: 题意过于复杂,我直接简化下.给出一个长度为n的数字串,只包含1到9,将数字 ...
- Java开发之反射的使用
通过类名获取类. Class serviceManager = Class.forName("android.os.ServiceManager"); 获取方法 Method me ...
- JAVA调用易信接口向指定好友推送消息(一)背景需求
众所周知,中国电信内部一直使用易信群进行交流 各种工作交流都在易信群里面沟通 包括投诉处理,障碍报修,拍照上传 最重要的就是每天甚至每个时点的指标完成情况的通报 所以只能用4个字来形容 String ...
- jvm内部现成运行
hi,all 最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据. 前段时间因为系统代码问题,造成性能瓶颈,于是就dump了一份stack出来 ...
- 【转】《APUE》第三章笔记(4)及习题3-2
原文网址:http://www.cnblogs.com/fusae-blog/p/4256794.html APUE第三章的最后面给出的函数,现在还用不着,所以,先留个名字,待到时候用着了再补上好了. ...
- 关于DatePicker控件在IsEnabled为False视觉效果没有明显辨识度的处理方法
DatePicker控件在IsEnabled为False时界面没有让人看上去不可用(背景为灰色等)的效果.容易让用户迷惑. 可以用下面的代码增加设置透明度的触发器来解决(XAML以及C#方式): &l ...
- Matlab编程实例(3) 函数向左或向右平移N点 左移右移
%函数移动 close all; clear all; dir=input('请输入平移方向,“1”为向左,“2”为向右'); if dir~=1&&dir~=2;%输入控制 e ...
- POJ2987 Firing 最大权闭合图
详情请参考http://www.cnblogs.com/kane0526/archive/2013/04/05/3001557.html 值得注意的地方,割边会把图分成两部分,一部分和起点相连,另一部 ...