博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式----组合模式UML和实现代码
阅读量:6983 次
发布时间:2019-06-27

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

hot3.png

一、什么是组合模式?

组合模式(Composite)定义:将对象组合成树形结构以表示‘部分---整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性.

类型:结构型模式

顺口溜:适装桥享代外

二、组合模式UML

013154_lAMx_2003960.png

三、JAVA代码实现

package com.amosli.dp.composite;public 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);}package com.amosli.dp.composite;import java.util.ArrayList;import java.util.List;public class Composite extends Component {	public Composite(String name) {		super(name);	}	private List
 components= new ArrayList
(); @Override public void add(Component c) { components.add(c); } @Override public void remove(Component c) { components.remove(c); } @Override public void display(int depth) { System.out.println(Util.concat("-", depth++).concat(name)); for (Component component : components) { component.display(depth+1); } }}package com.amosli.dp.composite;public class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void add(Component c) { System.out.println("this is leaf,cannot be added!"); } @Override public void remove(Component c) { System.out.println("this is leaf,cannot be removed!"); } @Override public void display(int depth) { System.out.println(Util.concat("-", depth).concat(name)); }}package com.amosli.dp.composite;public class Util { public static String concat(String str, int num) { StringBuilder sb  = new StringBuilder(); for(int i=0;i

输出结果:

020156_dJZY_2003960.png

四、使用场景

1.你想表示对象的部分-整体层次结构

2.你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

       引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”

五、源码地址

本系列文章源码地址,  欢迎Fork  & Star !!

转载于:https://my.oschina.net/u/2003960/blog/534510

你可能感兴趣的文章
Redhat和ubuntu的区别
查看>>
技术人生:新的生活计划
查看>>
Apple 远程推送APNS 服务
查看>>
failed to get the task for process XXX(解决方案)
查看>>
[转载]在VirtualBox中收缩虚拟磁盘映像文件
查看>>
raid*
查看>>
10个最好的 jQuery 视频插件(转)
查看>>
RabbitMQ 四种Exchange
查看>>
linux下改变文件的字符编码
查看>>
为Ubuntu笔记本电脑设置WiFi热点共享上网
查看>>
getContextPath、getServletPath、getRequestURI的区别
查看>>
SQL注入原理
查看>>
mongo操作
查看>>
MATLAB 中gcf、gca 以及gco 的区别
查看>>
linux 命令行字符终端terminal下强制清空回收站
查看>>
二叉排序树1
查看>>
Axure母版
查看>>
获得了知识(条件)后的概率称为后验概率 对先验概率的个性化调整
查看>>
Java NIO示例:多人网络聊天室
查看>>
keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z
查看>>