专业的JAVA编程教程与资源

网站首页 > java教程 正文

Java设计模式之组合模式(组合 java)

temp10 2025-07-28 20:16:05 java教程 7 ℃ 0 评论

组合模式

定义:将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。

组合模式是将对象组合成树状结构,其中树的节点可以是单个对象或对象组合。这样,无论是操作单个对象还是对象组合,都可以使用统一的方式进行操作。组合模式通过定义一个共同的抽象类或接口来表示单个对象和对象组合,从而实现了透明的处理。

Java设计模式之组合模式(组合 java)

特点

优点

  • 组合模式使得客户端代码可以一致地处理单个对象和组合对象,无须关心自己处理的是单个对象,还是组合对象,这简化了客户端代码;
  • 更容易在组合体内加入新的对象,客户端不会因为加入了新的对象而更改源代码,满足“开闭原则”;

缺点:

  • 设计较复杂,客户端需要花更多时间理清类之间的层次关系;
  • 不容易限制容器中的构件;
  • 不容易用继承的方法来增加构件的新功能;

结构与实现

主要构件如下:

  • 抽象构件:它的主要作用是为树叶构件和树枝构件声明公共接口,并实现它们的默认行为。
  • 叶构件:是组合中的叶节点对象,它没有子节点,用于实现抽象构件角色中 声明的公共接口。
  • 树枝构件:是组合中的分支节点对象,它有子节点。它实现了抽象构件角色中声明的接口,主要作用是存储和管理子部件,通常包含 Add()、Remove()、GetChild() 等方法。

类图如下:

示例代码如下:

Component.java

public interface Component {
	void add(Component c);
	void remove(Component c);
	Component getChild(int i);
	void operation();
}

Leaf.java

	
	private String name;
	public Leaf(String name) {
		this.name = name;
	}
	@Override
	public void add(Component c) {
	}
	@Override
	public void remove(Component c) {
	}
	@Override
	public Component getChild(int i) {
		return null;
	}
	@Override
	public void operation() {
		System.out.println(MessageFormat.format("树叶[{0}]业务代码执行", name));
	}

}

Composite.java

public class Composite implements Component {
	private List<Component> childeren;
	public Composite() {
		this.childeren = new ArrayList<Component>();
	}
	@Override
	public void add(Component c) {
		childeren.add(c);
	}
	@Override
	public void remove(Component c) {
		childeren.remove(c);
	}
	@Override
	public Component getChild(int i) {
		return childeren.get(i);
	}
	@Override
	public void operation() {
		childeren.forEach(item -> item.operation());
	}

}

CompositeTest.java

public class CompositeTest {
	public static void main(String[] args) {
		Composite composite = new Composite();
		Component leafa = new Leaf("A");
		Component leafb = new Leaf("B");
		Component leafc = new Leaf("C");
		composite.add(leafa);
		composite.add(leafb);
		composite.add(leafc);
		composite.operation();
	}
}

应用场景

在需要表示一个对象整体与部分的层次结构的场合。要求对用户隐藏组合对象与单个对象的不同,用户可以用统一的接口使用组合结构中的所有对象的场合。

将组合模式中的树叶节点和树枝节点进行抽象,也就是说树叶节点和树枝节点还有子节点,这时组合模式就扩展成复杂的组合模式。如 JavaAWT、Swing中就有大量的应用

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表