1、理解结构型模式的概念及作用
2、掌握组合模式的概念及使用
题目:
某教育机构组织结构如下图所示。
在该教育机构的OA系统中可以给各级办公室下发公文,现采用组合模式设计该机构的组织结构,绘制相应的类图并使用Java语言编程模拟实现,在客户端代码中模拟下发公文。
类图:
类图说明:
AbstractSchool:抽象类,是实现所有类共有的接口默认行为。用于访问和管理子部件。
ClassRoom:叶子节点,表示教务办公室,实现getWrite()方法,表示下发通知。
WorkRoom:叶子节点,表示行政办公室,实现getWrite()方法,表示下发通知。
Folder:容器,可以添加新的叶子节点,并继续在叶子节点里实现方法。
Client:具体的客户端测试类。
代码:
AbstractSchool:抽象类
public abstract class AbstractSchool {
public abstract void add(AbstractSchool room);
public abstract void remove(AbstractSchool room);
public abstract void getWrite();
}
ClassRoom:叶子节点,表示教务办公室
public class ClassRoom extends AbstractSchool {
private String name;
public ClassRoom(String name) {
this.name = name;
}
@Override
public void getWrite() {
System.out.println("-----" + name + "下发了公文");
}
@Override
public void add(AbstractSchool room) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractSchool room) {
System.out.println("不支持该方法");
}
WorkRoom:叶子节点,表示行政办公室
public class WorkRoom extends AbstractSchool{
private String name;
public WorkRoom(String name) {
this.name = name;
}
@Override
public void getWrite() {
System.out.println("-----" + name + "下发了公文");
}
@Override
public void add(AbstractSchool room) {
System.out.println("不支持该方法");
}
@Override
public void remove(AbstractSchool room) {
System.out.println("不支持该方法");
}
}
Folder:容器
import java.util.ArrayList;
public class Folder extends AbstractSchool {
private ArrayList<AbstractSchool> list = new ArrayList<AbstractSchool>();
private String name;
public Folder(String name) {
this.name = name;
}
@Override
public void add(AbstractSchool room) {
list.add(room);
}
@Override
public void remove(AbstractSchool room) {
list.remove(room);
}
@Override
public void getWrite() {
System.out.println("*****对" + name + "进行下发公文");
for (Object obj : list) {
((AbstractSchool) obj).getWrite();
}
}
}
Client:具体的客户端测试类
public class Client {
public static void main(String[] args) {
AbstractSchool folderBeijing, folderHunan, folderChangsha, folderXiangtan, C1, W1, C2, W2, C3, W3, C4, W4;
folderBeijing = new Folder("北京总部");
folderHunan=new Folder("湖南分校");
folderChangsha=new Folder("长沙教学点");
folderXiangtan=new Folder("湘潭教学点");
C1=new ClassRoom("北京总部的教学办公室");
W1=new WorkRoom("北京总部的行政办公室");
C2=new ClassRoom("湖南分校的教学办公室");
W2=new WorkRoom("湖南分校的行政办公室");
C3=new ClassRoom("长沙教学点的教学办公室");
W3=new WorkRoom("长沙教学点的行政办公室");
C4=new ClassRoom("湘潭教学点的教学办公室");
W4=new WorkRoom("湘潭教学点的行政办公室");
folderBeijing.add(C1);
folderBeijing.add(W1);
folderBeijing.add(folderHunan);
folderHunan.add(C2);
folderHunan.add(W2);
folderHunan.add(folderChangsha);
folderHunan.add(folderXiangtan);
folderChangsha.add(C3);
folderChangsha.add(W3);
folderXiangtan.add(C4);
folderXiangtan.add(W4);
folderBeijing.getWrite();
}
}
运行结果:
以上为我学习过程中所着手的一个简单实验,可供参考。