【问题标题】:Open/Close principle and polymorphism开/关原理和多态性
【发布时间】:2016-11-23 00:53:33
【问题描述】:

开放/封闭原则指出软件实体(类、模块等)应该对扩展开放,但对修改关闭。我今天了解到这个,我的老师说这个概念与多态性的概念有内在的联系。我真的看不出这两个概念是如何联系起来的,谁能解释一下吗?

【问题讨论】:

    标签: oop


    【解决方案1】:

    这是我的解释。 看下面的例子:

    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 原则。为什么?如果您需要让应用程序能够绘制新形状(例如三角形),则无需修改 Render 类的 DrawShapes 方法。
    您只需要创建一个实现接口IShape的新类“Triangle”并将其传递给DrawShapes方法。
    这段代码也是多态的,因为“DrawShapes”方法不需要知道它正在渲染的形状的类型。

    注意一件事:O.C.P.的关闭。原则总是战略性的。这是什么意思?这意味着您不能拥有 100% 禁止修改的代码。示例:如果您需要在圆圈之前绘制所有正方形,会发生什么?在这种情况下,您必须修改 DrawShapes 方法;也许使用策略模式,您可以注入策略来对形状的绘制进行排序。

    【讨论】:

    • 非常感谢!我明白了这个想法!
    猜你喜欢
    • 2016-01-10
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多