博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(十二)——组合模式
阅读量:7047 次
发布时间:2019-06-28

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

  hot3.png

一、定义

将对象组合成树形结构的层次结构,树的节点或者整个结构对于调用者来说没有任何区别

二、要素

1.枝干和叶子节点的抽象类

2.枝干类

3.叶子节点类

三、代码实例

//节点和枝干抽象类

public abstract class Component {
    public void doSomething(){
        
    }
}

//枝干

public class Composite extends Component{
    private ArrayList<Component> list = new ArrayList<Component>();
    
    public void add(Component component){
        list.add(component);
    }
    
    public ArrayList<Component> getChilds(){
        return this.list;
    }
}

//叶子节点

public class Leaf extends Component{
    private String mValue;
    public Leaf(String value){
        this.mValue = value;
    }
    public void doSomething(){
        System.out.print(this.mValue+"\n");
    }
}

//客户端

public class Client {
    public static void main(String[] args) {
        Composite root = new Composite();
        Composite branch = new Composite();//枝干
        Component leftLeaf = new Leaf("左叶子节点");//左叶子节点
        Component rightLeaf = new Leaf("右叶子节点");//右叶子节点
        branch.add(leftLeaf);
        branch.add(rightLeaf);
        root.add(branch);
        show(root);
    }
    
    public static void show(Composite root){
        for(Component component : root.getChilds()){
            if(component instanceof Leaf){
                component.doSomething();
            } else {
                show((Composite)component);
            }
        }
    }
}
四、说明

1.高层模块无需关心处理的是单个对象还是整个组合结构

2.枝干和叶子节点都很容易扩展,符合开闭原则

转载于:https://my.oschina.net/kun123/blog/727569

你可能感兴趣的文章
我是怎样不关站通过备案的
查看>>
JavaScript(React Native、Node.js等)移动、服务端通吃的全栈语言
查看>>
0成本日涨粉1000+,新媒体小白也能实操的引流方法
查看>>
微软MCITP系列课程(十五)搭建DHCP服务器
查看>>
《VMware虚拟化与计算应用案例详解》第三次印刷!
查看>>
Lync Server 2013企业版部署系列之六:AD准备
查看>>
ORA-600 [Kgeade_is_0]内部错误一例
查看>>
六个SEO关键词分析工具
查看>>
SQL Server 的一些操作
查看>>
FootPrint提取并自动化建模(简化)
查看>>
【技术贴】百度输入法老皮肤下载|百度输入法老的默认皮肤|百度皮肤下载
查看>>
discuz x2.5 模版制作 滚动图片
查看>>
使用GDB和Valgrind调试C程序
查看>>
不可思议,40个令人惊叹的iOS应用程序图标的设计灵感
查看>>
apache设置多个虚拟主机使多个域名可行有两种办法:1.多个IP解析到不同虚拟主机 2.单个IP绑定多个域名分解...
查看>>
mochiweb 源码阅读(十七)
查看>>
POJ 1946 Cow Cycling (dp推荐)
查看>>
FC/NES 音乐示例程序 生日快乐歌
查看>>
[AX]AX2012开发新特性-UnitOfWork
查看>>
WindowsPhone-GameBoy模拟器开发系列
查看>>