【每日一记】设计模式——组合模式

本文介绍了一种设计模式——组合模式,该模式通过将对象组织成树形结构来表示部分与整体的关系,使用户能够一致地处理单个对象和组合对象。通过具体实现示例展示了如何在代码中应用这一模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

  • 定义:将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性
  • 适用场景:表示对象的部分-整体层次结构,同时希望用户忽略组合对象与单个对象的不同

实现

public abstract class Component {
    protected String name;

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

    public abstract void add(Component component);

    public abstract void remove(Component component);

    public abstract void foreach();
}

class Composite extends Component {
    private List<Component> markets = new ArrayList<>();

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

    @Override
    public void add(Component component) {
        markets.add(component);
    }

    @Override
    public void remove(Component component) {
        markets.remove(component);
    }

    @Override
    public void foreach() {
        System.out.println(name);
        for (Component m : markets) {
            m.foreach();
        }
    }

}

class Leaf extends Component {

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

    @Override
    public void add(Component component) {
    }

    @Override
    public void remove(Component component) {
    }

    @Override
    public void foreach() {
        System.out.println(name);
    }

}
// 客户端
public class Client {
    public static void main(String[] args) {
        Component root = new Composite("root");
        Component c1 = new Composite("composite 1");
        Component c2 = new Leaf("leaf 1");
        Component c3 = new Leaf("leaf 1-1");
        root.add(c1);
        root.add(c2);
        market1.add(c3);
        root.foreach();
    }
}

通过组合模式模糊了简单元素和复杂元素,使客户端对两者一视同仁,从而降低了客户端对于复杂元素内部结构的耦合

实际应用

org.w3c.dom.Node

类图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值