组合模式
来源:互联网 发布:fuse cc是什么软件 编辑:程序博客网 时间:2024/06/05 03:19
组合模式:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象的使用的具体一致性。
使用场景:
需求中是体现部分与整体层次的机构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一的使用组合结构中的所有对象时,就应该考虑用组合模式了。
优点:
组合模式定义了包含基本对象和组合对象的类层次结构,基本对象可以被组合成更复杂的组合对象,而这个组合对象又可以被组合,这样不断地递归下去,客户代码中,任何用到基本对象的地方都可以使用组合对象了。
用户不用关心到底是处理一个叶节点还是处理一个组合控件,也就用不着为叮一族和二写一写选择判断语句了。组合模式可以让用户一致的使用组合结构和单个对象。
UML图:
代码实现:
package com.liran.main.DesignPattern.组合模式;import java.util.ArrayList;import java.util.List;/** * 组合模式 * Created by LiRan on 2016-02-27. */public class Composition_Pattern { public static void main(String[] args) { //生成树根root,树根上长出了两片树叶 Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Leaf("Leaf B")); //树根上生出了树枝Composite X,树枝Composite X上又长出了树叶 Composite com = new Composite("Composite X"); com.Add(new Leaf("Leaf XA")); com.Add(new Leaf("Leaf XB")); root.Add(com); //树枝Composite X上又生出了树枝Composite XY,这个树枝上也长出了树叶 Composite com2 = new Composite("Composite XY"); com2.Add(new Leaf("Leaf XYA")); com2.Add(new Leaf("Leaf XYB")); com.Add(com2); //树根上又长出了Leaf C和Leaf D ,Leaf D又脱落了 root.Add(new Leaf("Leaf C")); Leaf leaf = new Leaf("Leaf D"); root.Add(leaf); root.Remove(leaf); root.Display(1); }}abstract class Compenent { protected String name; public Compenent(String name) { this.name = name; } public abstract void Add(Compenent c); public abstract void Remove(Compenent c); public abstract void Display(int depth);}class Leaf extends Compenent { public Leaf(String name) { super(name); } @Override public void Add(Compenent c) { System.out.println("不能添加叶子"); } @Override public void Remove(Compenent c) { System.out.println("不能删除叶子"); } @Override public void Display(int depth) { System.out.println("-" + depth + " "+name); }}class Composite extends Compenent { /** * 一个对象的集合,用来存储其下属的枝节点也叶节点 */ private List<Compenent> children = new ArrayList<>(); public Composite(String name) { super(name); } @Override public void Add(Compenent c) { children.add(c); } @Override public void Remove(Compenent c) { children.remove(c); } @Override public void Display(int depth) { //显示其枝节点名称,并对夏季进行遍历 System.out.println("-" + depth + " "+name); for (Compenent c : children) { c.Display(depth + 1); } }}
源码下载:
Github
0 0
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- poj--3278--Catch That Cow(bfs)
- the Outline of Machine Learning
- Elasticsearch实战系列-mapping 设置
- Uml类图中的几种关系
- mysql笔记
- 组合模式
- centos 系统性能分析
- 22.Proxy Objects
- AIX 日志清理 监听日志清理--过大的Oracle监听日志文件处理
- 【ASUS】关于华硕笔记本win7下GTX950M独显驱动无法安装上的解决方法
- Activiti工作流简单入门
- 关于spring xml文件中的xmlns,xsi:schemaLocation
- 欢迎使用CSDN-markdown编辑器
- 如何保证Android Service在后台不被Kill,或者被Kill后重启