设为首页 加入收藏

TOP

Composite组合模式(一)
2015-07-20 17:18:05 来源: 作者: 【 】 浏览:7
Tags:Composite 组合 模式

组合模式又称合成模式,国外设计模式大师GOF把合成模式定义为:“将对象组合成树形结构以表示” 部分-整体的 层次结构

“将对象组合成树形结构以表示” 部分-整体的 层次结构可以理解为“通过树形结构,同等显示多个独立的对象以及他们复合而成的合成对象”

1.结构


\

Component:为组合中的对象声明接口。在适当的情况下,嘻嘻所有类共有接口的缺省行为,声明一个接口用户访问和管理Component的只组件。在递归结构中定义一个接口(可选),用户访问一个父部件并在合适的情况下实现它

Leaf:在组合中表示叶借点对象,叶子点没有子节点对,在组合定义图元对的行为

CompZ??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vc2l0ZTq2qNLl09DX07K/vP61xMTH0Kmyv7z+tcTQ0M6qLLTmtKLX07K/vP4s1NpDb21wb25lbnS907/a1tDKtc/W0+vX07K/vP7T0LnYtcSy2df3PC9wPgo8cD5DbGllbnQ6zai5/UNvbXBvbmVudL3Tv9qy2dfd1+m6z7K/vP61xLbUz/M8L3A+CjxwPjxzdHJvbmc+Mi7KtcD9PC9zdHJvbmc+PC9wPgo8cD48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_gnndr__.png" alt="\">

人事管理系统是Componet

员工原理包括 员工列表、新增员工、修改员工、员工资料上传、员工查询 子菜单(即没有内部树结构),因此,它只是一种树叶节点(即leaf)

以上树节点和树叶根据相同的地位共同组合人事管理系统,这就是组合模式在实际软件开发中的一个现实案例

应用优势与时机

组合具备以下一些优势

1.树型结构抑郁增加组合对象

2.无论分层对象是否复杂,均可清晰定义,并且可方便的添加新的构件

3.客户端可简便的共同调用组合或单个对象

应用场景

当开发树形结构系统时

当客户要求软件需要展现全局与个体关系时

当系统需要共同使用组合结构的全体对象时

示例

\

package model.composite;

/*
 * 排级单位抽象类
 * 定义一个军队排级单位的抽象类-即Component
 */
public abstract class Group {
	private String name = "";//姓名
	private String post = "";//官职
	private String no = "";//编号
	private Group parent = null;

	//实际软件项目中构造函数的定义
	public Group(String name, String post, String no) {
		super();
		this.name = name;
		this.post = post;
		this.no = no;
	}
	
	//获取军官信息
	public String getMessage(){
		String message ="";
		message ="姓名:"+this.name;
		message = message + "\t官职:"+this.post;
		message = message + "\t编号:"+this.no;
		return message;
	}
	
	//获取父节点
	public Group getParent() {
		return parent;
	}
	
	//设置父节点
	public void setParent(Group parent) {
		this.parent = parent;
	}
}

package model.composite;
/*
 * 叶子类
 * 班长-无下属军官的军官-Leaf
 */
public class Monitor extends Group{

	public Monitor(String name, String post, String no) {
		super(name, post, no);
	}
}

package model.composite;

import java.util.ArrayList;

/*
 * 节点类
 */
public class Node extends Group {
	
	//构造函数的定义
	public Node(String name, String post, String no) {
		super(name, post, no);
	}
	//上机军官下属包括哪些下级军官和下下级军官
	ArrayList
  
    juniorList = new ArrayList
   
    (); //增加一个下属,可能是下级军官,也可能是个下下级军官 public void addJunior(Group group){ group.setParent(this); juniorList.add(group); } //上级拥有的下属 public ArrayList
    
      getJunior(){ return this.juniorList; } } package model.composite; import java.util.ArrayList; /* * 客户端测试类 * 展现属树型结构: * 一级节点是排长platoonOfficer ,二级节点是副排长platoonSergeant,三级节点是班长monitor */ public class ClientCase { /* * 实现树型结构 */ public static Node CompositeNodeTree(){ //一级节点 Node node = new Node("杰克", "排长", "A0001"); //二级节点:二个副排长 Node platoonSergeant1 = new Node("李东", "副排长", "A0002"); Node platoonSergeant2 = new Node("将飞", "副排长", "A0003"); //三级节点:班长 Monitor a0002_1 = new Monitor("陈小小", "班长", "A0002_1"); Monitor a0002_2 = new Monitor("李梅", "班长", "A0002_2"); Monitor a0002_3 = new Monitor("师徒青云", "班长", "A0002_3"); Monitor a0003_1 = new Monitor("金宏", "班长", "A0003_1"); Monitor a0003_2 = new Monitor("马晓宇", "班长", "A0003_2"); Monitor a0003_3 = new Monitor("林东桥", "班长", "A0003_3"); //设置下级----------------- //排长下属二个副排长 node.addJunior(platoonSergeant1); node.addJunior(platoonSergeant2); //两个副排长下的下属 platoonSergeant1.addJunior(a0002_1); platoonSergeant1.addJunior(a0002_2); platoonSergeant1.addJuni
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇hdu3586 树形dp+二分求解 下一篇POJ 2185 Milking Grid (二维KMP ..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·如何理解c语言指针和 (2025-12-27 01:19:11)
·为什么C标准库没有链 (2025-12-27 01:19:08)
·玩转C语言和数据结构 (2025-12-27 01:19:05)
·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)