博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java_设计模式_组合模式_Composite Pattern(2016-08-12)
阅读量:4657 次
发布时间:2019-06-09

本文共 2832 字,大约阅读时间需要 9 分钟。

概念:

  组合模式(Composite Pattern)将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性

  有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦

类图:

涉及角色:

  1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。

 

  2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。

  3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除(remove)等。

举例如下:

 

//Component : 组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子部件。abstract class Component {    protected String name;        public Component(String name) {        this.name = name;    }        public abstract void Add(Component c);    public abstract void Remove(Component c);    public abstract void Display(int depth);}//Leaf : 表示叶节点对象。叶子节点没有子节点。class Leaf extends Component {    public Leaf(String name) {        super(name);    }    @Override    public void Add(Component c) {        System.out.println("Can not add to a leaf");    }    @Override    public void Remove(Component c) {        System.out.println("Can not remove from a leaf");    }    @Override    public void Display(int depth) {        String temp = "";        for (int i = 0; i < depth; i++) {            temp += '-';        }        System.out.println(temp + name);    }    }//Composite : 定义枝节点行为,用来存储子部件,在 Component 接口中实现与子部件相关的操作。例如 Add 和 Remove。class Composite extends Component {    private List
children = new ArrayList
(); public Composite(String name) { super(name); } @Override public void Add(Component c) { children.add(c); } @Override public void Remove(Component c) { children.remove(c); } @Override public void Display(int depth) { String temp = ""; for (int i = 0; i < depth; i++) { temp += '-';    } System.out.println(temp + name); for (Component c : children) { c.Display(depth + 2); } }}//Client : 通过 Component 接口操作结构中的对象。public class CompositePattern { public static void main(String[] args) { Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Leaf("Leaf B")); Composite compX = new Composite("Composite X"); compX.Add(new Leaf("Leaf XA")); compX.Add(new Leaf("Leaf XB")); root.Add(compX); Composite compXY = new Composite("Composite XY"); compXY.Add(new Leaf("Leaf XYA")); compXY.Add(new Leaf("Leaf XYB")); compX.Add(compXY); root.Display(1); }}

 

适用场景

  1、想要表示对象的部分-整体层次结构。

  2、想要客户端忽略组合对象与单个对象的差异,客户端将统一地使用组合结构中的所有对象。

  组合模式让可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。

  关于分级数据结构的一个普遍性的例子是你每次使用电脑时所遇到的:文件系统。文件系统由目录和文件组成。每个目录都可以装内容。目录的内容可以是文件,也可以是目录。按照这种方式,计算机的文件系统就是以递归结构来组织的。如果想要描述这样的数据结构,那么可以使用组合模式。

转载于:https://www.cnblogs.com/scevecn/p/5765670.html

你可能感兴趣的文章
重点错误记录
查看>>
IDEA kotlin 配置
查看>>
navicat编辑记录 (zhuan)
查看>>
Error 3050003 assertion failure with message: read 错误
查看>>
30分钟搭建一个小型网站框架(python django)
查看>>
JavaScript
查看>>
数据仓库基础内容
查看>>
== 和 Equals 的区别
查看>>
C#界面设计疑问
查看>>
QC 2.0为啥可以快充
查看>>
【网页插件】jQuery Weather v3.0 (网页天气预报)
查看>>
基于大数据计算思想的分布式数据库
查看>>
MyBaties --day1
查看>>
.net 使用AgsXMPP与openfire连接,实现跨平台信息流通。
查看>>
DP动态规划【专辑@AbandonZHANG】
查看>>
Android TextureView简易教程
查看>>
IDEA解决从git上clone代码没有maven依赖的问题
查看>>
django 在centos 7 下 指定ip地址和端口 报错问题
查看>>
1203 实验三 进程调度模拟实验
查看>>
ptyhon之路day3-文件处理及函数1
查看>>