我正在编写代码来制作普通电视广告时段。
因此,我需要对数据进行这种管理:
dayParting
可以有多个DayParts
DayPart
可以有多个TimeParts
。DayPart
并DayParting
有一个开始时间和一个结束时间TimePart
仅一个小时,并在那时显示节目。第一次,我只是使用Lists来完成工作,但是我开始觉得那太“不易扩展”和“太过实现而不是拖延”解决方案了,于是我开始寻找这个问题的替代解决方案。 。
我当时在考虑使用复合模式,该模式可提供灵活性,打开扩展并允许我统一处理复合对象和单个对象。
所以,我认为我的课程应该是:
class AbstractDayparting{ //
}
class DayParting extends AbstractDayparting{ //Composite
}
class TimePart extends AbstractDayparting{ // Leaf
}
我觉得我可以使用复合模式,但是我有两种不好的感觉:
我不知道(1)是否合适,以及(2)我不知道如何获取特定类型的所有复合对象(例如:All DayParts)。
我在强迫模式吗?有解决这个问题的更好的方法吗?
我的自定义复合模式非常“严格”,因为叶子始终处于最低级别。
一个A有很多B,而一个B有很多C。自然C处于最低级别。没错。
我需要从特定级别获取对象。
由于DayPart属于DayParting,因此您可以调用DayParting.getDayParts()来获取所有DayParts。示例代码:
/**
* A parting is a period of time.
*/
abstract class Parting {
final int beginingHour;
final int endHour;
public Parting(int beginingHour, int endHour) {
this.beginingHour = beginingHour;
this.endHour = endHour;
}
public int getBeginingHour() {
return beginingHour;
}
public int getEndHour() {
return endHour;
}
}
class DayParting extends Parting {
List<DayPart> dayParts = new ArrayList<DayPart>();
public DayParting(int beginingHour, int endHour) {
super(beginingHour, endHour);
}
public List<DayPart> getDayParts() {
return dayParts;
}
}
class DayPart extends Parting {
List<TimePart> timeParts= new ArrayList<TimePart>();
public DayPart(int beginingHour, int endHour) {
super(beginingHour, endHour);
}
}
class TimePart extends Parting {
public TimePart(int beginingHour) {
super(beginingHour, beginingHour + 1); // only one hour
}
}
假设属于DayParting的所有DayPart具有相同的(beginingHour,endHour),则添加此
class DayParting extends Parting {
public void addDayPart() {
dayParts.add(new DayPart(this.beginingHour, this.endHour));
}
}
假设属于DayParting的每个DayPart具有不可见的(beginingHour,endHour),则添加此
class DayParting extends Parting {
public void addDayPart(int beginingHour, int endHour) {
dayParts.add(new DayPart(beginingHour, endHour));
}
}
事实是,DayParting只有一个DayPart类型,但是有很多实例,因此它仍然是Composite模式。好消息是,您可以在将来以很小的变化添加更多类型。
class VariantDayPart extends DayPart {
public VariantDayPart(int beginingHour, int endHour) {
super(beginingHour, endHour);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句