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