1
내 요구 사항는 모양의 이름을 사용하고 치수 방법 Draw('rectangle', 'l:10,w:20');
처럼로 그 모양을 그릴 것입니다.서로 상호 작용하도록 이러한 클래스를 리팩토링하는 방법은 무엇입니까?
- 모양의 유형에 대한 치수 검증이 있어야합니다.
- 이러한 클래스는 리팩터링되어 더 많은 클래스를 추가하거나 계층을 변경할 수 있습니다.
- 반영과 같은 런타임 검사를 사용하지 않아야합니다. 문제는 수업 설계로만 해결해야합니다.
- 클라이언트 메서드
Draw
에if-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; }
}
리플렉션을 사용할 수 없습니다. 클래스 계층을 수정하거나 새 클래스를 추가 할 수 있습니다. –
@wonderfulworld 그러면 if-else 조건을 사용하여 문자열 값을 확인할 수 있으며 각각의 경우 해당 메소드를 호출 할 수 있습니다. –
코드로 설명 할 수 있습니까? ''if-else''와''switch''' 문을 피하려고합니다. –