设计模式之组合模式(Composite Pattern)
类图
含义
- 定义通用接口Component
- Leaf是Component的具体实现,实现具体的operation操作
- Composite的operation则间接调用组合的Component的operation方法
优点
- 对于客户端代码而言,只需面向Component接口,执行其operation方法即可。
- 适用于树状的数据结构
示例
一个画图的小程序,类图如下所示:
客户端代码:
package org.lin.pattern;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Client {
public static void main(String[] args) {
JFrame frame = new JFrame("paint");
frame.setSize(1000, 700);
frame.setLocationRelativeTo(null);
CompositeShape shape = new CompositeShape();
shape.addShape(new Circle(0, 0, Color.RED, 100));
shape.addShape(new Circle(300, 300, Color.BLUE, 100));
shape.addShape(new Rectengle(150, 150, Color.PINK, 400, 200));
JPanel panel = new JPanel() {
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
shape.print(g);
}
};
panel.setSize(1000, 700);
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
运行效果: