사용자 정의 합성 패턴은 잎이 항상 가장 낮은 레벨에 있기 때문에 꽤 "강체"입니다.
하나의 A는 많은 Bs를 가지며 하나의 B는 많은 Cs를 갖는다. 자연스러운 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
}
}
가이 시간대에 속하는 모든 편성 가정은 동일 (beginingHour, endHour가), 당신이
class DayParting extends Parting {
public void addDayPart() {
dayParts.add(new DayPart(this.beginingHour, this.endHour));
}
}
가이 시간대에 속하는 각 일별 세분화를 가정 추가 있음 직관 개별 (beginingHour, endHour), 당신 이 시간대는 하나 개의 일별 세분화 유형하지만, 많은 인스턴스가이
class DayParting extends Parting {
public void addDayPart(int beginingHour, int endHour) {
dayParts.add(new DayPart(beginingHour, endHour));
}
}
것은이 추가, 그래서 그것은 여전히 복합 패턴입니다. 좋은 점은 아주 작은 변화와 함께 앞으로 더 많은 유형을 추가 할 수 있다는 것입니다.
class VariantDayPart extends DayPart {
public VariantDayPart(int beginingHour, int endHour) {
super(beginingHour, endHour);
}
}
도움이 되셨습니다. :) 감사합니다! – exsnake