2017-03-22 54 views
1

要求是使用形状的名称,并绘制形状与尺寸的方法Draw('rectangle', 'l:10,w:20');如何重构这些类来互相交互?

  1. 应该有针对该形状的类型的尺寸的验证。
  2. 可以重构这些类以添加更多类或更改层次结构。
  3. 应该使用反射之类的运行时检查。这个问题只能通过课堂设计来解决。
  4. 不要在客户端的方法Draw使用if-elseswitch语句。

要求:

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'''语句。 –