Composite模式是构造型的设计模式之一,通过递归手段来构造诸如文件系统之类的树形的对象结构;Composite模式所代表的数据构造是一群具有统一接口界面的对象集合,并可以通过一个对象来访问所有的对象(遍历)。
[img]http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Composite_UML_class_diagram.svg/480px-Composite_UML_class_diagram.svg.png[/img]
[size=large][b]Component<-----> MediaElement[/b][/size]
[size=large][b]Leaf <-----> Media[/b][/size]
[size=large]Composite <-----> MediaList 、 TimeList 、 DateList[/size]
呃。。。不知道我依照高楼大厦建了个小屋,还是挖了个地洞,先记下来再说,设计模式的具体应用有点难。
[img]http://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Composite_UML_class_diagram.svg/480px-Composite_UML_class_diagram.svg.png[/img]
[size=large][b]Component<-----> MediaElement[/b][/size]
public interface MediaElement {
public void add(MediaElement);
public void remove(MediaElement);
public void display();
}
[size=large][b]Leaf <-----> Media[/b][/size]
public class Media implements MediaElement {
String name;
mediaType type;
public void display() {
// 根据mediaType来决定显示的方式,对图片、网页一直显示,对视频文件,一直循环播放。
}
}
[size=large]Composite <-----> MediaList 、 TimeList 、 DateList[/size]
public class MediaList implements MediaElement {
time duration; // 针对一个图片、网页显示的时长,针对视频,设为null;
ArrayList<Media> list; // 多个Media组成的列表
public void add(Media) {
// 添加一个Media对象到list;
}
public void remove(Media) {
// 从list中删除一个Media对象;
}
public void display() {
loop
foreach(list)
// 若list的当前Media为图片或网页,则调用其display,并在duration时间后,结束display。
// ???若为视频,这里好像有点问题
}
}
public class TimeList implements MediaElement {
time startTime; // 开始时间
time endTime; // 结束时间
ArrayList<MediaList> list; // 多个MediaList组成的列表
public void add(MediaList) {
// 添加一个MediaList对象到list;
}
public void remove(MediaList) {
// 从list中删除一个MediaList对象;
}
public void display() {
// 到startTime时,开始
loop {
foreach(list) {
// 调用MediaList的display
}
// 到达结束时间后,结束 。
}
}
}
public class DateList implements MediaElement {
date var1;
ArrayList<TimeList> list;
public void add(TimeList) {
// 添加一个TimeList对象到list;
}
public void remove(TimeList) {
// 从list中删除一个TimeList对象;
}
public void display() {
// 到指定日时,开始
foreach(list) {
// 调用TimeList的display
// list遍历一遍后,结束。
}
}
}
呃。。。不知道我依照高楼大厦建了个小屋,还是挖了个地洞,先记下来再说,设计模式的具体应用有点难。