ITKeyword,专注技术干货聚合推荐

注册 | 登录

设计模式学习(结构型模式)—组合模式(Composite)

xiaoyi848699 分享于 2014-11-04

推荐:【设计模式学习笔记九】【结构型模式】【组合模式(Composite)】

本文是学习刘伟技术博客和《设计模式-可复用面向对象软件的基础》笔记,博客链接:http://blog.csdn.net/lovelion/article/details/17517213 主要是对博客和书本

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

组合模式(Composite) 

把整体和局部的关系用树状结构描述出来,使得客户端把整体对象和局部对象同等看待。



推荐:设计模式(九)组合模式(Composite)-结构型

组合模式Composite 组合模式也叫合成模式,又叫树形模式,就是把部分和整体的关系用树形结构来表示,是的客户端对单个对象和组合对象的使用具有一致性,可以看出


public abstract class Node {
	String name;
	public Node(String name) {
		this.name=name;
	}
	public abstract void add(Node node);  
	public abstract void remove(Node node);  
	public abstract void display(int depth);  
	public abstract void lineOfDuty();  
}

public class PeopleLeafNode extends Node {//人事分支类

	public PeopleLeafNode(String name) {
		super(name);
	}
	@Override
	public void add(Node node) {
		System.out.println("can not add node");
	}
	@Override
	public void remove(Node node) {
		
		System.out.println("can not remove node");
		
	}
	@Override
	public void display(int depth) {
		for (int i = 0; i < depth; i++) {
			System.out.print("-");
		}
		System.out.println(name);
		
	}
	@Override
	public void lineOfDuty() {
		System.out.println(name+"\t人事是打酱油的");
		
	}
}

public class MoneyLeafNode extends Node {//财务分支类

	public MoneyLeafNode(String name) {
		super(name);
	}
	@Override
	public void add(Node node) {
		System.out.println("can not add node");
	}
	@Override
	public void remove(Node node) {
		
		System.out.println("can not remove node");
		
	}
	@Override
	public void display(int depth) {
		for (int i = 0; i < depth; i++) {
			System.out.print("-");
		}
		System.out.println(name);
		
	}
	@Override
	public void lineOfDuty() {
		System.out.println(name+"\t财务是管钱的");
	}
}

import java.util.ArrayList;
import java.util.List;

public class CompositeNode extends Node {
	private List<Node> children = new ArrayList<Node>();

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

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

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

	@Override
	public void display(int depth) {
		for (int j = 0; j < depth; j++) {
			System.out.print("-");
		}
		System.out.println(name);
		
		for (Node node:children) {
			node.display(depth+2);
		}
		
	}

	@Override
	public void lineOfDuty() {
		for (Node node:children) {
			node.lineOfDuty();;
		}
	}
}

public class TestComposite {
	public static void main(String[] args) {  
		  
		CompositeNode root=new CompositeNode("中国总公司");
		root.add(new LeafNode("湖北分公司"));
		root.add(new LeafNode("北京分公司"));
		  
		CompositeNode cx=new CompositeNode("湖南分公司");
		CompositeNode hn=new CompositeNode("长沙市分公司");
		hn.add(new MoneyLeafNode("长沙市分公司财务部"));
		hn.add(new PeopleLeafNode("长沙市分公司人事部"));
		cx.add(hn);
		cx.add(new LeafNode("益阳市分公司"));
		
		root.add(cx);
		CompositeNode cxy=new CompositeNode("广东分公司");
		cxy.add(new MoneyLeafNode("财务部"));
		cxy.add(new PeopleLeafNode("人事部"));
		root.add(cxy);
		CompositeNode lc=new CompositeNode("河南分公司");
		root.add(lc);
		System.out.println("\n结构图");
		root.display(1);
		
		System.out.println("\n职责");
		root.lineOfDuty();
	}  
}



打印结果:



推荐:[设计模式笔记]二. 结构型模式--9.Composite模式(组合)(一)

Composite(组合)模式(对象结构型模式) 一. 意图 将对象组合成树形结构以表示"部分-整体"的层次结构. Composite使得用户对单个对象和组合对象的使用具有一致性.

组合模式(Composite)  把整体和局部的关系用树状结构描述出来,使得客户端把整体对象和局部对象同等看待。 public abstract class Node { String name; public Node(String name) { this.

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。