面向对象七大设计原则-面向对象设计准则【案例】

一、单一职责原则:

全称:“Single-Responsibility Principle”

面向对象设计

说明:就一个类而言、应该只专注于做一件事和仅有一个引起它变化的原因、所谓职责、我们可以理解他为功能、就是设计的这个类功能应该只有一个、而不是两个或更多、也可以理解为引用变化的原因、当你发现有两个变化会要求我们修改这个类、那么你就要考虑撤分这个类了、因为职责是变化的一个轴线、当需求变化时、该变化会反映类的职责的变化。

面向对象七大设计原则-面向对象设计准则【案例】
面向对象七大设计原则-面向对象设计准则【案例】

使用SRP注意点:

1、一个合理的类、应该仅有一个引起它变化的原因、即单一职责;

2、在没有变化征兆的情况下应用SRP或其他原则是不明智的;

3、在需求实际发生变化时就应该应用SRP等原则来重构代码;

4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码;

5、如果测试不能迫使职责分离、僵化性和脆弱性的臭味会变得很强烈、那就应该用Facade或Proxy模式对代码重构;SRP优点:消除耦合、减小因需求变化引起代码僵化

二、里氏代换原则

全称:“Liskov Substitution Principle”

说明:子类型必须能够替换它们的基类型、一个软件实体如果使用的是一个基类、那么当把这个基类替换成继承该基类的子类、程序的行为不会发生任何变化、软件实体察觉不出基类对象和子类对象的区别

优点:可以很容易的实现同一父类下各个子类的互换、而客户端可以毫不察觉

三、依赖倒置原则

全称:“Dependence Inversion Principle”

说明:要依赖于抽象、不要依赖于具体、客户端依赖于抽象耦合

抽象不应当依赖于细节;细节应当依赖于抽象

要针对接口编程、不针对实现编程

优点:使用传统过程化程序设计所创建的依赖关系、策略依赖于细节、这是糟糕的、因为策略受到细节改变的影响、依赖倒置原则使细节和策略都依赖于抽象、抽象的稳定性决定了系统的稳定性

怎样做到依赖倒置?

以抽象方式耦合是依赖倒转原则的关键、抽象耦合关系总要涉及具体类从抽象类继承、并且需要保证在任何引用到基类的地方都可以改换成其子类、因此、里氏代换原则是依赖倒转原则的基础

在抽象层次上的耦合虽然有灵活性、但也带来了额外的复杂性、如果一个具体类发生变化的可能性非常小、那么抽象耦合能发挥的好处便十分有限、这时可以用具体耦合反而会更好、层次化:所有结构良好的面向对象构架都具有清晰的层次定义、每个层次通过一个定义良好的、受控的接口向外提供一组内聚的服务

依赖于抽象:建议不依赖于具体类、即程序中所有的依赖关系都应该终止于抽象类或者接口、尽量做到:

1、任何变量都不应该持有一个指向具体类的指针或者引用

2、任何类都不应该从具体类派生

3、任何方法都不应该覆写它的任何基类中的已经实现的方法

四、接口隔离原则

全称:“Interface Segregation Principle”

说明:使用多个专一功能的接口比使用一个的总接口总要好、从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小接口上的、过于臃肿的接口是对接口的污染、不应该强迫客户依赖于它们不用的方法

优点:会使一个软件系统功能扩展时、修改的压力不会传到别的对象那里

如何实现接口隔离原则

不应该强迫用户依赖于他们不用的方法

1、利用委托分离接口

2、利用多继承分离接口

五、迪米特原则

全称:“Law of Demeter”

说明:对象与对象之间应该使用尽可能少的方法来关联、避免千丝万缕的关系

如何实现迪米特法则?

迪米特法则的主要用意是控制信息的过载、在将其运用到系统设计中应注意以下几点:

1、 在类的划分上、应当创建有弱耦合的类、类之间的耦合越弱、就越有利于复用

2、在类的结构设计上、每一个类都应当尽量降低成员的访问权限、一个类不应当public自己的属性、而应当提供取值和赋值的方法让外界间接访问自己的属性

3、在类的设计上、只要有可能、一个类应当设计成不变类

4、在对其它对象的引用上、一个类对其它对象的引用应该降到最低

六、开放-封闭原则

全称:“Open-Closed Principle”

说明:对扩展开放、对修改关闭

优点:按照OCP原则设计出来的系统、降低了程序各部分之间的耦合性、其适应性、灵活性、稳定性都比较好、当已有软件系统需要增加新的功能时、不需要对作为系统基础的抽象层进行修改、只需要在原有基础上附加新的模块就能实现所需要添加的功能、增加的新模块对原有的模块完全没有影响或影响很小、这样就无须为原有模块进行重新测试。

如何实现“开-闭”原则?

在面向对象设计中、不允许更改的是系统的抽象层、而允许扩展的是系统的实现层、换言之、定义一个一劳永逸的抽象设计层、允许尽可能多的行为在实现层被实现、解决问题关键在于抽象化、抽象化是面向对象设计的第一个核心本质。

对一个事物抽象化、实质上是在概括归纳总结它的本质、抽象让我们抓住最最重要的东西、从更高一层去思考、这降低了思考的复杂度、我们不用同时考虑那么多的东西、换言之、我们封装了事物的本质、看不到任何细节。

在面向对象编程中、通过抽象类及接口、规定了具体类的特征作为抽象层、相对稳定、不需更改、从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为、从而满足“对扩展开放”。

对实体进行扩展时、不必改动软件的源代码或者二进制代码、关键在于抽象。

七、合成复原原则:
全称:(Composite Reuse Principle,CRP)

尽量使用对象组合、而不是继承来达到复用的目的。

组合/聚合复用原则(Composite/Aggregate Reuse Principle CARP).组合和聚合都是对象建模中关联(Association)关系的一种.聚合表示整体与部分的关系、表示“含有”、整体由部分组合而成、部分可以脱离整体作为一个独立的个体存在、组合则是一种更强的聚合、部分组成整体、而且不可分割、部分不能脱离整体而单独存在、在合成关系中、部分和整体的生命周期一样、组合的新的对象完全支配其组成部分、包括他们的创建和销毁、一个合成关系中成分对象是不能与另外一个合成关系共享。

组合/聚合和继承是实现复用的两个基本途径、合成复用原则是指尽量使用合成/聚合、而不是使用继承

只有当以下的条件全部被满足时、才应当使用继承关系

1. 子类是超类的一个特殊种类、而不是超类的一个角色、也就是区分“Has-A”和“Is-A”.只有“Is-A”关系才符合继承关系、“Has-A”关系应当使用聚合来描述。

2 .永远不会出现需要将子类换成另外一个类的子类的情况、如果不能肯定将来是否会变成另外一个子类的话、就不要使用继承。

3 .子类具有扩展超类的责任、而不是具有置换掉或注销掉超类的责任、如果一个子类需要大量的置换掉超类的行为、那么这个类就不应该是这个超类的子类。

错误的使用继承而不是合成/聚合的一个常见原因是错误地把“Has-A”当成了“Is-A”.”Is-A”代表一个类是另外一个类的一种;而“Has-A”代表一个类是另外一个类的一个角色、而不是另外一个类的特殊种类。

下面属于问题补充,希望能帮助到各位网友哈!

七大原则列表详细说明
1.单一职责原则(SRP)
2.开闭原则(OCP)
3.里氏代换原则(LSP)
4.依赖倒置原则(DIP)
5.接口隔离原则(ISP)
6.合成复用原则(CRP)
7.迪米特法则(LoD)

对于面向对象软件系统而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题。在面向对象设计中,可维护性的服用是以设计原则为基础的。常用的面向对象原则就包括七种。

1.单一职责原则(SRP)
单一职责原则(Single Responsibility Principle):
一个类只负责一个功能领域中的相应职责。
或者定义为就一个类而言,应该只有一个引起它变化的原因。
单一职责原则是实现高内聚,低耦合的指导方针,它是最简单但又最难以运用的原则。

2.开闭原则(OCP)
开闭原则(Open-Closed Principle):(消灭分支语句if…else…)
软件实体应该对扩展开放而对修改关闭。
即软件实体应尽量在不修改原有的代码上进行扩展。
关键:抽象化,并从抽象化导出具体实现。
一般在原有模型中添加抽象层(接口、抽象类)

3.里氏代换原则(LSP)
里氏代换原则(Liskov Substitution Prinicple):
所有引用其(基类)父类的地方都能够透明的引用其子类。
任何基类可以出现的地方,子类一定可以出现,里氏替换原则是继承复用的基石。即把基类换成子类,程序也不会出错。

4.依赖倒置原则(DIP)
依赖倒置原则(Dependece Inversion Principle):
抽象不应该不依赖于细节,细节应该依赖于抽象。
换言之,要针对接口编程,而不是针对实现编程。

5.接口隔离原则(ISP)
接口隔离原则(Interface Segregation Principle):
使用多个专门的接口,而不是用单一的总接口

6.合成复用原则(CRP)
合成复用原则(Composite Reuse Principle):
尽量使用对象组合,而不是继承来达到复用的目的。
(1)继承复用:白箱
破坏了系统封装性,继承会将基类实现细节暴露给子类。
(2)合成服用:黑箱
新对象可调用已有对象功能,使对象内部实现细节对新对象不可见。
相对于继承复用而言,其耦合性相对较低,成员对象对新对象影响不大。可动态运行。
服用时尽量减少组合/聚合关系,少用继承。

7.迪米特法则(LoD)
迪米特法则(Law of Demeter ):
一个软件实体应当尽可能少地与其他实体发生相互作用。

本文来自用户:IT男的投稿,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/4211.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。

(2)
上一篇 2022年6月10日 17:07
下一篇 2022年6月14日 21:46

相关推荐

  • 如何申请百度联盟?需要哪些要求?【详细讲解】

    各位朋友们大家好,这次朱子佩想和大家聊聊关于如何申请百度联盟需要哪些要求,还有关于加入百度联盟联盟,网站,广告等等其他相关干货,既然来了就别走了,好好的静下心把这篇文章阅读完相信你会有一定的收获哦! 现如今做网站赚钱已经慢慢不单纯只靠联盟广告了,变现方法非常多,但对于一个流量小站来说,起初广告联盟也是唯一的过度选择。现在的广告栏目五花八门,比较大的有百度联盟…

    2022年10月3日
  • 服务器托管是什么?和租用有什么区别?【最新推荐】

    小伙伴们大家好,今天李虹讲的文章是服务器托管是什么和租用有什么区别,还有关于服务器托管服务器,机房,意思这些的相关干货文章,经过我各种整理总结之后,决定写下这篇文章分享给大家。 服务器托管 机房托管示例图 服务器托管的意思跟幼儿园托管的意思一样,把自己购买的服务器放到IDC服务商机房,让人家帮你维护管理,你只需要出维护费就可以了。 服务器租用 租用就是我们日…

    2022年11月6日
  • 如何在企业微信上添加联系人和建立群组

    如何在企业微信上添加联系人和建立群组 一、添加联系人 在企业微信中,添加联系人是非常方便的。您可以按照以下步骤进行操作: 打开企业微信,进入“通讯录”模块。 点击“添加联系人”按钮。 输入联系人的手机号码或扫描二维码添加联系人。 完善联系人的信息后,点击“保存”即可。 二、建立群组 除了添加联系人,企业微信还支持建立群组,方便企业进行团队沟通和协作。以下是建…

    2023年8月26日
  • 女性驾驶员购车需求分析及建议(女性驾驶员汽车购车需求解析与建议)

    女性驾驶员购车需求分析及建议 随着女性驾驶员数量的不断增加,女性驾驶员的购车需求也日益增长。女性驾驶员在购车时更注重哪些方面?又有哪些建议适合女性驾驶员呢?以下是我们的调查结果: 1. 安全性:女性驾驶员在购车时,首先考虑的是安全性。她们更注重车辆的安全性能、刹车性能、车身结构、轮胎等方面。因此,建议女性驾驶员选择具有较高安全性能的车型,如沃尔沃、宝马等品牌…

    技术 2023年8月23日
  • 如何在购买二手车时避免被骗(购买技巧和建议)

    近年来,随着二手车市场的不断发展,越来越多的消费者选择购买二手车。然而,购买二手车时也要警惕被骗的风险。为了帮助广大消费者避免被骗,我们提供以下购买二手车的技巧和建议。 1.仔细检查车辆外观 在购买二手车时,首先要仔细检查车辆的外观。注意观察车身是否有划痕、凹陷、漆面起泡等问题。同时,还要检查车门、引擎盖等部位是否对称,避免购买事故车。 2.检查车辆内部设备…

    2023年8月29日
  • U盘坏了怎么办?(解决方法介绍和推荐)

    U盘坏了怎么办?(解决方法介绍和推荐) 一、检查硬件问题 1. 首先,将U盘插入其他电脑或设备上,确认是否只是与某台电脑不兼容或出现驱动问题。 2. 如果U盘在其他设备上也无法使用,则可能存在硬件问题。可以尝试将U盘连接到不同的USB接口,或者更换一根新的数据线进行测试。 3. 如果U盘仍然无法正常工作,可能需要寻求专业的硬件维修服务。 二、使用数据恢复软件…

    2023年8月16日