2016-06-04 2 views
2

나는 커 스텀 TV를 구성하는 코드를 만들고 있습니다. dayParting는 배수 TimeParts을 가질 수 배수 DayParts 복합 패턴을 사용하는 것이 좋습니다.

  • DayPart을 가질 수

    • :

      그래서 나는 데이터의 schme을 확인해야합니다.

    • DayPartDayParting는 그것이 단지 시간 인 시간 및 종료 시간
    • TimePart를 시작하고 그 시점에서 표시하는 프로그램이있다.
    난 그냥 작업을 할 목록을 처음 사용할 때

    ,하지만 난 그 해결책도 "확장자를 열 수 없습니다"였다 너무 "구현과 intarface하지"생각하기 시작, 그래서 검색 시작 이 문제에 대한 대안의 해결책.

    저는 복합 패턴을 사용하고 있다고 생각 했었습니다. 패턴은 유연성을 제공하고 확장을 열고 복합 및 개별 객체로 균일하게 작업 할 수있게했습니다.

    class AbstractDayparting{ // 
    } 
    class DayParting extends AbstractDayparting{ //Composite 
    } 
    class TimePart extends AbstractDayparting{ // Leaf 
    } 
    

    enter image description here

    나는 내가 복합 패턴을 사용할 수 있다고 생각,하지만 난이 개 나쁜 감정이 :

    그래서, 난 내 클래스가 있어야한다고 생각

    1. 내 사용자 지정 합성을 리프는 항상 가장 낮은 레벨 인 레벨에 있기 때문에 패턴은 꽤 "고정적"입니다.
    2. 특정 수준의 개체를 가져와야합니다.

    (1) 괜찮습니까? (2) 특정 유형 (예 : 모든 DayParts)의 모든 복합체를 가져 오는 방법을 모르겠습니다.

    패턴을 강요하고 있습니까? 이 문제에 대한 더 나은 해결책이 있습니까?

  • 답변

    2

    사용자 정의 합성 패턴은 잎이 항상 가장 낮은 레벨에 있기 때문에 꽤 "강체"입니다.

    하나의 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); 
         } 
        } 
    
    +0

    도움이 되셨습니다. :) 감사합니다! – exsnake