2017-03-22 4 views
1

요구 사항모양의 이름을 사용하고 치수 방법 Draw('rectangle', 'l:10,w:20');처럼로 그 모양을 그릴 것입니다.서로 상호 작용하도록 이러한 클래스를 리팩토링하는 방법은 무엇입니까?

  1. 모양의 유형에 대한 치수 검증이 있어야합니다.
  2. 이러한 클래스는 리팩터링되어 더 많은 클래스를 추가하거나 계층을 변경할 수 있습니다.
  3. 반영과 같은 런타임 검사를 사용하지 않아야합니다. 문제는 수업 설계로만 해결해야합니다.
  4. 클라이언트 메서드 Drawif-else 또는 switch 문을 사용하지 마십시오.

요구 사항은 :

public static void main() 
{ 
    // Provide the shape and it's dimensions 
    Draw('rectangle', 'l:10,w:20'); 
    Draw('circle', 'r:15'); 
} 

나는 다음과 같은 클래스를 만들었습니다. 나는 두 개의 클래스 계층 구조를 만들어 자신이 자랄 수 있도록 낮은 (느슨한) 커플 링과 높은 결합력을 고려했습니다. 나는 한 클래스에 드로잉하고 다른 클래스에 차원을 생성하는 책임을 지켰다.

제 질문은 이러한 요구 사항을 충족하기 위해 이러한 개체를 만들고 서로 상호 작용하는 것입니다.

public abstract class Shape() 
{ 
    Dimension dimension; 
    public void abstract SetDimentions(Dimension dimension); 
    public void abstract Draw() 
} 

public void Rectangle() 
{ 
    void override SetDimensions(RectangleDimension dimension) 
    { 
    } 

    void override Draw() 
    { 
     // Use the 'dimention' to draw 
    } 
} 

public void Circle() 
{ 
    void override SetDimensions(CircleDimension dimension) 
    { 
    } 

    void override Draw() 
    { 
     // Use the 'dimention' to draw 
    } 
} 

public class RectangleDimension 
{ 
    public int length {get; set; } 
    public int width { get; set; } 
} 

public class CircleDimension 
{ 
    public int circle { get; set; } 
} 

답변

1

사용중인 OOP 기술에 반사 기능을 사용해야합니다. String ("circle")과 같은 이름이 붙은 메서드를 호출해야합니다.

Java에서이를 수행 할 수있는 방법이며 C#에서 할 수 있습니다.

+0

리플렉션을 사용할 수 없습니다. 클래스 계층을 수정하거나 새 클래스를 추가 할 수 있습니다. –

+0

@wonderfulworld 그러면 if-else 조건을 사용하여 문자열 값을 확인할 수 있으며 각각의 경우 해당 메소드를 호출 할 수 있습니다. –

+0

코드로 설명 할 수 있습니까? ''if-else''와''switch''' 문을 피하려고합니다. –

관련 문제