Java设计模式(十一)组合模式

栏目: 后端 · 发布时间: 5年前

内容简介:组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。

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

组合模式

组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的 设计模式 属于结构型模式,它创建了对象组的树形结构。

Java设计模式(十一)组合模式

组合模式的包含角色:

(1) Component 抽象构件角色,定义参加组合对象的共有方法和属性,可以定义一些默认的行为或属性。

(2) Leaf 叶子构件,叶子对象,其下再也没有其他的分支,也就是遍历的最小单位。

(3) Composite 树枝构件,树枝对象,它的作用是组合树枝节点和叶子节点形成一个树形结构。

1、抽象构件角色

public abstract class Component {
    public void operation() {
        System.out.println("Component.operation()");
    }
}

2、树枝构件

public class Composite extends Component {
    private ArrayList<Component> componentArrayList = new ArrayList<>();

    public void add(Component component) {
        componentArrayList.add(component);
    }
    public void remove(Component component) {
        componentArrayList.remove(component);
    }
    public ArrayList<Component> getChildren() {
        return this.componentArrayList;
    }
}

3、树叶构件

public class Leaf extends Component {
    @Override
    public void operation() {
        System.out.println("Leaf.operation()");

    }
}

4、组合模式的使用

public class CompositeMain {
    public static void main(String[] args) {
        Composite root = new Composite();
        root.operation();

        Composite branch = new Composite();
        root.add(branch);

        Leaf leaf1 = new Leaf();
        Leaf leaf2 = new Leaf();
        branch.add(leaf1);
        branch.add(leaf2);

        display(root);

    }

    public static void display(Composite root) {

        for (Component component : root.getChildren()) {
            if (component instanceof Leaf) {
                component.operation();
            } else {
                display((Composite) component);
            }
        }
    }
}

组合模式的优缺点:

优点:高层模块调用简单;节点自由增加。

缺点:在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。

本文实现源码: https://github.com/wshunli/design-patterns/tree/master/src/ch11

参考资料

1、 JAVA 设计模式十七—Composite(组合模式) - CSDN博客

https://blog.csdn.net/hfmbook/article/details/7693069

2、Java设计模式—组合模式 - CSDN博客

https://blog.csdn.net/qq_25827845/article/details/52496522

3、组合模式 | 菜鸟教程

http://www.runoob.com/design-pattern/composite-pattern.html

如果本文对您有所帮助,且您手头还很宽裕,欢迎打赏赞助我,以支付网站服务器和域名费用。 Java设计模式(十一)组合模式 您的鼓励与支持是我更新的最大动力,我会铭记于心,倾于博客。

本文链接: https://www.wshunli.com/posts/fb6e1df3.html


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术:第4卷 第4册(双语版)

计算机程序设计艺术:第4卷 第4册(双语版)

Donald E.Knuth / 苏运霖 / 机械工业出版社 / 2007-4 / 42.00元

关于算法分析的这多卷论著已经长期被公认为经典计算机科学的定义性描述。迄今已出版的完整的三卷组成了程序设计理论和实践的惟一的珍贵源泉,无数读者都赞扬Knuth的著作对个人的深远影响。科学家们为他的分析的美丽和优雅所惊叹,而从事实践的程序员们已经成功地应用他的“菜谱式”的解到日常问题上,所有人都由于Knuth在书中所表现出的博学、清晰、精确和高度幽默而对他无比敬仰。   为开始后续各卷的写作并更......一起来看看 《计算机程序设计艺术:第4卷 第4册(双语版)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码