文档章节

每天一个设计模式之(14)-----组合模式

SamrtLamb
 SamrtLamb
发布于 2017/07/21 11:19
字数 417
阅读 2
收藏 0

1.为什么要使用组合模式

    组合模式其实就是一种树形的数据结构,在接口/抽象类中定义一个方法,不论是根节点,还是树枝结点还是叶子结点,都可以直接调用,形成了一种“部分-整体”的结构。

2.看一下类图

    Component是抽象类,有自己的名字,并定义了获取自己孩子结点的方法,并实现了display的方法,Composite是根节点和数枝结点的实现,Leaf是叶子结点的实现

3.实现

    抽象类

public abstract class Component {

    private String name;

    public String getName() {
        return name;
    }

    public Component(String name) {
        this.name = name;
    }


    abstract List<Component> getChildren();

    abstract void setChildren(List<Component> children);

    //最重要的是这个方法
    void display(){
        System.out.println(this.name);
        if(null != getChildren()){
            for (Component component : getChildren()){
                component.display();//递归打印
            }
        }
    }
}

    Composite和Leaf

public class Composite extends Component{

    private List<Component> children;

    public Composite(String name) {
        super(name);
    }

    public void setChildren(List<Component> children) {
        this.children = children;
    }

    @Override
    public List<Component> getChildren() {
        return children;
    }

}




public class Leaf extends Component{
    public Leaf(String name) {
        super(name);
    }

    @Override
    List<Component> getChildren() {
        return null;
    }

    @Override
    void setChildren(List<Component> children) {
        //空方法
    }

}

    main方法


/**
 * Created by hr on 2017/07/21.
 * 组合模式
 */
public class Main {

    public static void main(String[] args) {
        //设置根节点
        Component root = new Composite("root");

        //设置树枝节点
        Component branch1 = new Composite("branch1");
        Component branch2 = new Composite("branch2");
        List<Component> branches = new ArrayList<>();
        branches.add(branch1);
        branches.add(branch2);


        //设置叶子结点
        Component leaf1 = new Leaf("leaf1");
        Component leaf2 = new Leaf("leaf2");
        Component leaf3 = new Leaf("leaf3");
        List<Component> leaves = new ArrayList<>();
        leaves.add(leaf1);
        leaves.add(leaf2);
        leaves.add(leaf3);

        //组建成树
        root.setChildren(branches);
        branch1.setChildren(leaves);

        //打印树
        System.out.println("=========打印整颗树========");
        root.display();

        //或者打印一个树枝
        System.out.println("=========打印branch1======");
        branch1.display();
    }
}

//输出结果
=========打印整颗树========
root
branch1
leaf1
leaf2
leaf3
branch2
=========打印branch1======
branch1
leaf1
leaf2
leaf3

 

© 著作权归作者所有

共有 人打赏支持
SamrtLamb
粉丝 0
博文 28
码字总数 19760
作品 0
杭州
私信 提问
Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei
05/26
0
0
设计模式 2014-12-19

book: 阎宏《JAVA与模式》 架构设计栏目 http://blog.csdn.net/enterprise/column.html 概要: http://bbs.csdn.net/forums/Embeddeddriver 23种设计模式分别是: 1.单例模式 2.工厂方法模式...

jayronwang
2014/12/19
0
0
(目录)设计模式(可复用面向对象软件的基础)

本系列“设计模式”博客使用Golang语言实现算法。所谓算法是指解决一个问题的步骤,个人觉得不在于语言。小弟只是最近学习Golang,所以顺带熟练一下语法知识,别无它意。 本系列博客主要介绍...

chapin
2015/01/13
0
0
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
06/24
0
0
Ubuntu中vi卸载与安装/使用模式

Ubuntu中安装的vi是vim-common版本,与centos系统中vi使用方式不同,编辑使用不惯, 遂卸载重装,卸载命令:sudo apt-get remove vim-common 卸载完毕后重新安装;输入命令:sudo apt-get in...

唐十三郎
11/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty 备录 (一)

入职新公司不久,修修补补1个月的bug,来了点实战性的技术---基于netty即时通信 还好之前对socket有所使用及了解,入手netty应该不是很难吧,好吧,的确有点难,刚看这玩意的时候,可能都不知道哪里...

_大侠__
昨天
4
0
Django简单介绍和用户访问流程

Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。 Django是一个开放源代码的Web应用框架,由Python写成。 Django遵守BSD版权,初...

枫叶云
昨天
7
0
EOS错误代码及中文释义

本文集汇总了EOS区块链常见错误代码及其含义,完整错误代码集请查看 EOS错误代码集 - 汇智网 EOS错误代码列表如下, <table class="table table-striped"> <thead> <tr><th>错误代码</th><t......

汇智网教程
昨天
2
0
Spring Cloud Stream消费失败后的处理策略(四):重新入队(RabbitMQ)

应用场景 之前我们已经通过《Spring Cloud Stream消费失败后的处理策略(一):自动重试》一文介绍了Spring Cloud Stream默认的消息重试功能。本文将介绍RabbitMQ的binder提供的另外一种重试...

程序猿DD
昨天
4
0
kiss原则

KISS 原则是用户体验的高层境界,简单地理解这句话,就是要把一个产品做得连白痴都会用,因而也被称为“懒人原则”。换句话说来,”简单就是美“。KISS 原则源于 David Mamet(大卫马梅)的电...

NB-One
昨天
14
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部