2017-03-22 74 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'''語句。 –