java组合设计模式Composite Pattern

组合设计模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端对单个对象和组合对象的使用具有一致性。

// Component - 图形接口
interface Graphic {
    void draw();
}

// Leaf - 叶子节点:圆形
class Circle implements Graphic {
    @Override
    public void draw() {
        System.out.println("Drawing a Circle");
    }
}

// Leaf - 叶子节点:正方形
class Square implements Graphic {
    @Override
    public void draw() {
        System.out.println("Drawing a Square");
    }
}

// Composite - 组合节点:图形组合
class CompositeGraphic implements Graphic {
    private List<Graphic> childGraphics = new ArrayList<>();

    @Override
    public void draw() {
        for (Graphic graphic : childGraphics) {
            graphic.draw();
        }
    }

    // 添加子图形
    public void add(Graphic graphic) {
        childGraphics.add(graphic);
    }

    // 移除子图形
    public void remove(Graphic graphic) {
        childGraphics.remove(graphic);
    }
}

// 客户端代码
public class CompositePatternDemo {
    public static void main(String[] args) {
        // 创建叶子节点
        Graphic circle = new Circle();
        Graphic square = new Square();

        // 创建组合节点
        CompositeGraphic composite = new CompositeGraphic();
        CompositeGraphic composite2 = new CompositeGraphic();

        // 构建组合树结构
        composite.add(circle);
        composite.add(square);
        composite2.add(composite);
        composite2.add(new Circle());

        // 绘制组合图形
        composite2.draw();
    }
}

在这个示例中:

  1. Graphic接口是所有图形组件的共同接口,定义了一个draw方法。
  2. CircleSquare类是叶子节点,实现了Graphic接口的draw方法。
  3. CompositeGraphic类是组合节点,包含了一组Graphic对象,并实现了Graphic接口的draw方法。它能够添加和移除子节点。
  4. CompositePatternDemo类是客户端代码,展示了如何创建和使用组合图形结构。

通过这种方式,客户端代码可以一致地处理单个对象和组合对象。无论是单个圆形、正方形,还是由这些图形组合而成的复杂结构,客户端都可以通过相同的接口进行操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值