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类可能会对现有的功能造成影响。

原文地址:https://www.cnblogs.com/shadoll/p/14149295.html