美文网首页
面向对象(OO)原则&设计模式

面向对象(OO)原则&设计模式

作者: 宏势 | 来源:发表于2023-09-06 14:21 被阅读0次
image.png

一、面向对象(OO)原则

面向对象OO七大原则为:

1.单一职责原则(Single Responsibility Principle)

  • 一个类或者方法只负责一个功能点
  • 对一个类来说,应该仅有一个引起它变化的原因
  • 单一职责原则既简单也难运用,简单是它易于理解,一个类(大到模块,小到方法)承担的职责越多,被复用的可能性就越低,耦合度就高,一个职责变化会影响其它职责。难运用因为职责的界限比较难划分,跟实际所处环境和背景相关。

2.开闭原则(Open Close Principle)

  • 对扩展开放,对修改关闭; 系统中的模块、类或者方法对提供者(开发者)是开放的,可以对现有系统功能进行扩展(新增)功能, 系统中的模块、类或者方法对使用者(调用者)是关闭的,使用者不用因为提供方新增功能而导致使用者要跟着修改,扩展和新增功能不直接修改已有代码

  • 当需求发生变化时,应该通过增加新的代码来扩展现有功能,而不是直接修改已有代码

3.里氏替换原则(Liskov Substitution Principle)

  • 将一个父类对象替换成它的子类对象后,不会影响程序的执行结果
  • 简单来说,子类可以扩展父类的功能,但不能改变父类的原来的功能(尽量不要重写父类方法)

(1)优点

  • 代码复用,子类拥有父类的方法和属性

(2)缺点

  • 继承是侵入性,降低代码灵活性,一旦继承,子类就拥有父类的方法和属性,多一份约束
  • 增加耦合性,当父类属性和方法被修改时,需要考虑子类的修改
  • 一个类只能继承一个父类(java)
  • 要真正做到不重写父类方法是一种理想状态

里氏替换原则最初由Barbara Liskov在1987年的一次学术会议中提出,而真正正式发表是在1994年,Barbara Liskov 和 Jeannette Wing发表的一篇学术论文《A behavioral notion of subtyping》, Liskov是美国第一个计算机科学女博士

4.依赖倒置原则(Interface Segregation Principle)

  • 不要依赖具体,要依赖抽象(接口)
  • 抽象不应该依赖实现,实现应该抽象
  • 面向接口编程,不要面向实现编程

降低类间的耦合性,提高代码的可读性和可维护性

5.接口隔离原则(Dependence Inversion Principle)

  • 提供单一接口,不要提供臃肿庞大的接口
  • 尽量将臃肿庞大的接口拆分成更小的和更具体的接口,让接口中只包含客户感兴趣的方法

接口隔离能有效降低类对接口的依赖性,从而降低耦合性,同时也应该避免盲目过度拆分接口,造成接口类冗余。

6.合成/聚合复用原则(Composite/Aggregate Reuse Principle CARP)

  • 尽量使用对象组合取代继承来达到复用的目的

(1) 组合复用(Has-A)

在新类中通过组合关系来使用已有的类,使其成为新类的一部分,新类可以委派调用已有类的方法达到功能复用的目的,已有类内部实现细节对于新类不可以见,所以又称“黑箱”复用.

(2) 继承复用(Is-A)

通过继承已有类,让新类拥有已有类(父类)的方法和属性以达到复用功能的目的, 继承会把父类的实现细节暴露给子类,所以又称“白箱”复用.

组合复用和继承复用都能达到复用的目的,但是继承复用会破坏系统的封装性,父类发生变化,子类需要相应发生变化,而合同复用更加灵活,耦合度更低

7.迪米特法则(Law Of Demeter)

  • 尽量降低类与类之间的耦合,一个类依赖的类越少越好。

  • 该法则也叫最少知道原则, 一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友类通信,对于出现在成员变量、方法的输入和输出参数中的类都可以被称为直接朋友,而出现在方法体内部的类不属于朋友类即陌生人

  • 比如有三个类A、B、C,现在A类只需要调用B类的方法,B类则去调用C类的属性,如果此时A类中出现了C类的对象,就相当于A类和C类发生了耦合关系,但实际上两者并不相关,并没有联系。此时B类应该完成处理C类的属性以及方法再将结果返回给A类,而A类也不需要出现C类即可

OO七大原则是包含Solid原则的,Solid原则是七大原则中前5个的首写字母, 软件编程总原则:低耦合,高内聚

二、设计模式 (23种)

1.创建型模式

2.结构型模式

3.行为型模式:常用6种不常用5种

相关文章

  • 面向对象设计原则

    面向对象设计原则 面向对象设计原则是设计模式的基础,每个设计模式都符合一一种或多种面向对象的设计原则。 常用的面向...

  • 面向对象:6大原则、24种设计模式

    接上一篇:面向对象介绍 为什么要学设计原则、设计模式? 若不学好经典设计模式,和通过设计模式理解面向对象的原则,你...

  • Swift设计模式----目录

    面向对象设计原则: 开闭原则 单一职责原则 依赖倒置原则 接口分离原则 迪米特法则 里氏替换原则 面向对象设计模式...

  • 设计模式的原则

    面向对象的原则是面向对象的目标,而设计模式是为了实现这些原则的手段和方法。这也就是为什么要有设计模式。 面向对象的...

  • Android 设计模式之常见设计模式总结

    今天我们来总结下我们所学习的设计模式 面向对象的六大原则 Android 设计模式之面向对象的六大原则 面向对象的...

  • 面向对象、设计原则、设计模式、编程规范、重构

    面向对象、设计原则、设计模式、编程规范、重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程。 面...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 设计模式

    1 软件设计原则和设计模式概览 1.1 面向对象设计原则 1.2 GOF设计模式 1.3 C嵌入式编程设计模式 ...

  • 面向对象、设计模式基础知识

    1 面向对象2 设计模式 1 面向对象 1.1 多态 多态是具有表现多种形态的能力特征,在OO中是指,语言具有根据...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

网友评论

      本文标题:面向对象(OO)原则&设计模式

      本文链接:https://www.haomeiwen.com/subject/jnaaudtx.html