0
打開/關閉原則指出軟件實體(類,模塊等)應該打開以進行擴展,但關閉以進行修改。今天我瞭解了這一點,我的老師說這個概念與多態概念有內在聯繫。我無法真正看到兩個概念是如何連接的,任何人都可以解釋一下嗎?打開/關閉原理和多態性
打開/關閉原則指出軟件實體(類,模塊等)應該打開以進行擴展,但關閉以進行修改。今天我瞭解了這一點,我的老師說這個概念與多態概念有內在聯繫。我無法真正看到兩個概念是如何連接的,任何人都可以解釋一下嗎?打開/關閉原理和多態性
這是我的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方法;也許有了策略模式,您可以注入策略來對圖形進行排序。
非常感謝!我明白了這個主意! –