【设计模式】15-组合设计模式

目录

 

什么是组合模式

为什么要用组合模式

组合模式组成


什么是组合模式

由每一个单元节点,组合成一个整体节点,这种对单个节点的结构存储和对整体节点的存储和处理逻辑保持一致的设计模式便是组合设计模式。

 

为什么要用组合模式

应用中有很多场景会用到组合模式,例如树状存储的结构,比如多级菜单,每一层级菜单的处理都可以抽象保持一致。比如企业的组织架构,员工都具有一些共同的属性,而区别在于相应有无下属员工。

 

组合模式组成

抽象节点

public abstract class Node {

	protected String name;

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

	public void info() {
		System.out.println(String.format("node name %s", name));
	}

	public abstract void add(Node node);

	public abstract void remove(Node node);

	public abstract List<Node> getChildren();
}

具体节点

public class NodeObj extends Node {

	private List<Node> children = new ArrayList<>();

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

	@Override
	public void add(Node node) {
		this.children.add(node);
	}

	@Override
	public void remove(Node node) {
		this.children.remove(node);
	}

	@Override
	public List<Node> getChildren() {
		return this.children;
	}
}


测试驱动

public class Client {
	public static void main(String[] args) {
		Node root = new NodeObj("root");
		Node c1 = new NodeObj("c1");
		Node c11 = new NodeObj("c11");
		Node c12 = new NodeObj("c12");
		c1.add(c11);
		c1.add(c12);
		Node c2 = new NodeObj("c2");
		root.add(c1);
		root.add(c2);
		displey(root);
	}

	public static void displey(Node root) {
		root.info();
		if (root.getChildren().size() > 0) {
			for (Node node : root.getChildren()) {
				displey(node);
			}
		}
	}
}



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值