• C# 设计原则-开闭原则


      开闭原则,全称Open Closed Principle,英文缩写OCP。

      软件中的对象(类、模块、函数等)应该是对于拓展是开放的,而对于修改是封闭的。

      当一个模块需要修改的时候,我们不应该直接修改源代码,这样有可能对现有的工作造成影响。应该通过拓展来加需求。一开始就可以把功能模块抽象出来,如果确定了,就不能去修改,通过拓展去实现,就是建立在这个抽象出来的内容上。

      举个例子,在书店里有很多书,为了管理这些书,我们定义一个最底层的接口IBook,来规范一本书应该有的基本属性。

    public interface IBook
    {
        String GetName();
        Double GetPrice();
    }

       如果具体指某一本书,那么我们可以定义一个类去实现这个接口。

    public class StoryBook : IBook
    {
        public String Name { get; init; }
        public Double Price { get; init; }
        public StoryBook(String name, Double price)
        {
            this.Name = name;
            this.Price = price;
        }
        public String GetName()
        {
            return this.Name;
        }
        public Double GetPrice()
        {
            return this.Price;
        }
    }

      定义的StoryBook可以获取它的名字及它的价格。如果后面书店打折促销,这个类的GetPrice方法就不能获取到打折后的价格,而根据开闭原则,我们是不应该修改这个类的,因为修改后,有可能会影响现有的已经引用它的功能。我们可以新建一个类来继承原有的类,来重新实现原有获取价格的功能。

    public class DiscountStoryBook : StoryBook
    {
        public DiscountStoryBook(String name, Double price) : base(name, price)
        {
            this.Name = name;
            this.Price = price;
        }
    
        public new Double GetPrice()
        {
            return this.Price * 0.8;
        }
    }

      所以,我们可以通过这个新建的DiscountStoryBook类来获取打折后的价格,而不需要修改原有的StoryBook类,避免了原有的GetPrice方法在其它地方已经被使用,而修改该StoryBook类可能会对现有的功能造成影响。

  • 相关阅读:
    在Matlab2018b中配置MinGW-w64 C/C++ 编译器
    电脑忽然黑屏
    Linux中drwxr-xr-x.的意思和权限
    tensorflow 和cuda对应关系
    apt-get update 升级错误
    修改模型参数名
    tensor转化为ndarray
    Ubuntu GitLab仓库服务器搭建
    友元
    常函数 常对象
  • 原文地址:https://www.cnblogs.com/shadoll/p/14149295.html
Copyright © 2020-2023  润新知