2016-11-23 172 views
0

打開/關閉原則指出軟件實體(類,模塊等)應該打開以進行擴展,但關閉以進行修改。今天我瞭解了這一點,我的老師說這個概念與多態概念有內在聯繫。我無法真正看到兩個概念是如何連接的,任何人都可以解釋一下嗎?打開/關閉原理和多態性

回答

1

這是我的exaplanation。 請看下面的例子:

public interface IShape 
{ 
    void Draw(); 
} 

public class Square : IShape 
{ 
    public void Draw() 
    { 
     // DRAW SQUARE 
    } 
} 

public class Circle : IShape 
{ 
    public void Draw() 
    { 
     // DRAW CIRCLE 
    } 
} 

public class Renderer 
{ 
    public void DrawShapes(ICollection<IShape> shapes) 
    { 
     foreach (var shape in shapes) 
     { 
      shape.Draw(); 
     } 
    } 
} 

該代碼是開放的,以擴展和關閉,以修改因此它遵循OCP原則。爲什麼?如果您需要使應用程序能夠繪製新形狀(例如三角形),則不需要修改渲染類的DrawShapes方法。
您只需創建一個新類「Triangle」,該類實現接口IShape並將其傳遞給DrawShapes方法。
此代碼也是多態的,因爲「DrawShapes」方法不需要知道它正在呈現的形狀的類型。

注意一件事:關閉O.C.P.原則總是戰略。這是什麼意思?這意味着你不能擁有100%關閉修改的代碼。例如:如果您需要在圓圈之前繪製所有方塊,會發生什麼情況?在這種情況下,您必須修改DrawShapes方法;也許有了策略模式,您可以注入策略來對圖形進行排序。

+0

非常感謝!我明白了這個主意! –