我的自定义复合模式非常“刚性”,因为叶子总是处于最低级别。
一个A有很多B,一个B有很多C。自然C处于最低水平。没什么不好的。
我需要从特定级别获取对象。
由于 DayPart 属于 DayParting,您调用 DayParting.getDayParts() 来获取所有 DayPart。示例代码:
/**
* 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 的 DayParting 都有相同的(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);
}
}