java设计模式之组合模式

来源:互联网 发布:网络教育的意义 编辑:程序博客网 时间:2024/05/18 01:17

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


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

0 0
原创粉丝点击