面象对象设计的基本原则

"开放-封闭"原则(OCP)

Open-Closed Principle原则讲的是:一个软件实体应当对扩展开放,对修改关闭。
我的理解:如在工厂模式中,可以直接扩展产品类并投入使用,而不需要想简单工厂模式那样修改工厂类的判断逻辑;即增加新代码而不会引起原有代码的变动。
满足OCP带来的好处:
能保证模块的稳定性,又能对需求的变更提供灵活的应对方案。
 
 

里氏代换原则(LSP)

Liskov Substitution Principle(里氏代换原则):子类型(subtype)必须能够替换它们的基类型。
我的理解:LSP的针对点是OOD提炼抽象类,假设在代码段中,原先使用的是基类型,当使用子类型替换基类型后,代码仍旧可以正常工作,则表示是符合LSP的。
题外话:子类可以替换基类,但子类不等同于基类,子类可以提供比基类更丰富的功能。
LSP有一个著名的长方形和正方形例子,该例子表明提取的抽象类不能满足需要。
满足LSP带来的好处:
同一个基类下的子类型,可以复用算法。
 
 

依赖倒置原则(DIP)

依赖倒置(Dependence Inversion Principle)原则讲的是:要依赖于抽象,不要依赖于具体。
 
依赖(或者耦合)关系的种类:
零耦合(Nil Coupling)关系:两个类没有耦合关系;
具体耦合(Concrete Coupling)关系:发生在两个具体的(可实例化的)类之间,经由一个类对另一个具体类的直接引用造成;
抽象耦合(Abstract Coupling)关系:发生在一个具体类和一个抽象类(或接口)之间,使两个必须发生关系的类之间存有最大的灵活性;
 
我的理解:零耦合是最好的,但现实系统中不可能存在零耦合的软件,所以退而求其次选择抽象耦合;相对于具体耦合来说,抽象耦合允许具体类进行修改,而修改具体耦合中的类,则会出现“一处改,处处改”的局面。
满足DIP带来的好处:
可以促进OCP原则,并达到模块之间低耦合的目地。
 
 

接口隔离原则(ISP)

接口隔离原则(Interface Segregation Principle)讲的是:使用多个专门的接口比使用单一的总接口总要好。换而言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的。
 
我的理解:接口中提供的功能不能杂乱无章,需要细分一下,达到接口的单一目的性,如同类的单一职责原则一样。
满足ISP带来的好处:
消除代码的复杂性。
 
 
 

合成/聚合复用原则(CARP)

合成/聚合复用原则(Composite/Aggregate Reuse Principle或CARP)经常又叫做合成复用原则(Composite Reuse Principle或CRP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。
简而言之,要尽量使用合成/聚合,尽量不要使用继承。
 
我的理解:
 
 
 

迪米特法则(LoD)

迪米特法则(Law of Demeter或简写LoD)又叫最少知识原则(Least Knowledge Principle或简写为LKP),也就是说,一个对象应当对其它对象有尽可能少的了解。
 
我的理解:当一个对象需要操作另一个对象或接口来完成功能时,只需要了解少量的知识即可;体现在接口实现即接口要保证单一目的性,并且简单易于使用。
题外话:ISP可以支持LoD的实施
满足LoD带来的好处:
消除开发过程中的复杂性。
 
posted @   蛤蟆  阅读(352)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示