您的位置:首页 > 编程语言 > Java开发

java设计模式之组合模式

2014-01-22 20:30 399 查看
模式意图:让用户能够用统一的接口处理“单个对象”以及“对象组合(集合)”. 这种设计模式,在出现树形等层次结构时使用。

1.component (共享的公共接口或者抽象类):此可作为各组合对象的基础,同时也是其下属成员的统一接口:

import java.util.List;

public abstract
class Employer {

/* Component (共享接口):

* 1、“单个对象”以及“对象组合”的共享接口。

* 2、它定义了公用的一些方法及成员变量。

* 3、由它来统一对“单个对象”以及“对象组合”的操作

*/

protected List<Employer>employers;

private Stringname;

public String getName() {

returnname;

}

public
void setName(String name) {

this.name = name;

}

public
void showInfo() {

System.out.println(name);

}

public
abstract void add(Employer em);

public
abstract void delete(Employer em);

public List<Employer> getEmployers() {

returnemployers;

}

}
2.leaf (单个成员):此种类型的组合对象表示只有其自身,而没有其下属成员:
2.1 Programmer:

public class Programmerextends Employer {

/**

* leaf类,即单个类。

*/

public Programmer(String name) {

setName(name);

employers =null;

}

public
void add(Employer em) {

//
TODO Auto-generated method stub

}

public
void delete(Employer em) {

//
TODO Auto-generated method stub

}

}
2.2(Tester):

public class Testerextends Employer {

/**

* leaf类,即单个类。

*/

public Tester(String name) {

setName(name);

employers =null;

}

public
void add(Employer em) {

//
TODO Auto-generated method stub

}

public
void delete(Employer em) {

//
TODO Auto-generated method stub

}

}
3.composite (组合成员):真正地组合(集合)对象:它有自己的下属成员,具体存储在employers里面:

public class ProgramManagerextends Employer {

/**

* Composite类,即组合类(集合类)。

* 他下面又多个组成部件(员工),因此需要employers

*/

public ProgramManager(String name) {

setName(name);

employers =new ArrayList<Employer>();

}

public
void add(Employer em) {

//
TODO Auto-generated method stub

employers.add(em);

}

public
void delete(Employer em) {

//
TODO Auto-generated method stub

employers.remove(em);

}

}
4.测试程序:定义一个项目助理,两个程序员,一个项目经理,然后把前三者加到项目经理中去,接着取出项目经理的三个下属,再分别输出相关信息:

public staticvoid main(String[] args) {

ProgramManager pm = new ProgramManager("项目经理");

Tester te =new Tester("测试");

Programmer p1 =new Programmer("程序员一");

Programmer p2 =new Programmer("程序员二");

pm.add(te);

pm.add(p1);

pm.add(p2);

for (Employer em : pm.getEmployers()) {

em.showInfo();

}
}
5.运行结果:
项目助理

程序员一

程序员二
6.我的体会:
使用组合模式就是为了使对组合对象和单个对象的使用是一致的(定制统一的共享接口或者抽象类来实现)。如本例中Programmer和ProgramAssistant是单个对象,而programmanager是组合对象,但是他们都是employer的扩展,所以使用起来就可以认为是一样的。但是有可能会有下属,所以在employer里面要能够存储一系列的employer,本例中具体是指定义了一个list<employer>,如果没有下属的话,我们将相应变量设为空;如果有的话,我们加进去就可以了。当然,这些下属成员也可以进行获取,删除等操作。

转载地址:http://rainbowj234.diandian.com/post/2011-11-20/6979825
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java设计模式