美文网首页
面向对象的设计原则

面向对象的设计原则

作者: 简书帅气的昵称已被使用 | 来源:发表于2019-04-08 22:48 被阅读0次

一、开闭原则

开闭原则(Open Closed Principle, OCP)
对象:软件实体
原则:对扩展开放,对修改关闭

1、软件实体包括部分:

  • 项目中划出的模块
  • 类与接口
  • 方法

2、开闭原则的作用

使软件实体拥有一定的适应性和灵活性的同时具备稳定性和延续性

  • 对软件测试的影响
    软件遵守开闭原则的话,每增加新的模块,软件测试只需针对新增部分进行
  • 可以提高代码的复用性
    粒度越小,被复用的可能性就越大
  • 可以提高软件的可维护性

3、开闭原则的实现方法

抽象约束、封装变化

二、里氏替换原则

里氏替换是继承复用的基础,它反应了基类与子类之间的关系,是对开闭原则的补充,是对实现抽象化的具体步骤的规范

1、里氏替换原则的实现方法

子类可以扩展父类的功能,但不能改变父类原有的功能。子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法

三、依赖倒置原则

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象

1、依赖倒置原则的作用

  • 降低类间的耦合性
  • 提高系统的稳定性
  • 减少并行开发引起的风险
  • 提高代码的可读性和可维护性

2、依赖倒置原则的实现方法

依赖倒置原则的目的是通过面向接口的编程来降低类间的耦合性

  • 每个类尽量提供接口或抽象类,或者两者都具备
  • 变量的声明类型尽量是接口或者是抽象类
  • 任何类都不应该从具体类派生
  • 使用继承时尽量遵循里氏替换原则

四、单一职责原则

单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分

1、单一职责原则的优点

单一职责原则的核心就是控制类的粒度大小、将对象解耦、提高其内聚性

  • 降低类的复杂度。一个类只负责一项职责,其逻辑肯定比负责多项职责简单的多
  • 提高类的可读性。复杂度降低,自然可独享会提高
  • 提高系统的可维护性。可读性提高,那自然更容易维护了
  • 变更引起的风险降低。

2、单一职责原则的实现方法

将类的不同职责分离,再封装到不同的类或模块

五、接口隔离原则

一个类对另一个类的依赖应该建立在最小的接口上

  接口隔离原则和单一职责都是为了提高类的内聚性、降低它们之间的耦合性,体现了封装的思想,两者的不同在于:
1、单一职责原则注重的是职责,而接口隔离原则注重的是对接口依赖的隔离
2、单一职责原则主要是约束类,它针对的是程序中的实现和细节,接口隔离原则主要约束接口,主要针对抽象和程序整体框架的构建

1、接口隔离原则的优点

接口隔离原则是为了约束接口、降低类对接口的依赖性

  • 将臃肿庞大的接口分解为多个粒度小的接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性
  • 接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性
  • 如果接口的粒度大小定义合理,能够保证系统的稳定性,但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险
  • 使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义
  • 能减少项目工程中的代码冗余,过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码

2、接口隔离原则的实现方法

  • 接口尽量小,但要有限度。一个接口只服务于一个字模块或业务逻辑
  • 为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法
  • 提高内聚,减少对外交互

六、迪米特法则

又称最少知识原则
如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用
目的:降低类之间的耦合度,提高模块的相对独立性

1、迪米特法则的优点

  • 降低类之间的耦合度,提高模块的相互独立性
  • 由于亲和度降低,从而提高类的可复用率和系统的扩展性

2、迪米特法则的实现方法

  • 从依赖者的角度:只依赖应该依赖的对象
  • 从被依赖者的角度:只暴露应该暴露的方法

七、合成复用原则

又称组合/聚合复用原则(Composition/Aggregate Reuse Principle, CARP)

1、合成复用原则的重要性

  • 继承复用破坏了类的封装性。因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为"白箱"复用
  • 子类与父类的耦合度高。父类的实现的任何改变都将导致子类的实现发生变化,这不利于类的扩展与维护
  • 它限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,所以在运行时不可能发生变化

相关文章

  • 面向对象设计原则

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

  • 面向对象设计原则(二)开闭原则

    面向对象设计原则之开闭原则 开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。 开闭原则的...

  • 01-设计模式原则

    面向对象的设计原则 面向对象的设计原则也被称为SOLID。SOLID原则包括单一职责原则、开闭原则、里氏替换原则、...

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

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

  • 面向对象设计原则

    面向对象设计原则

  • (1)面向对象的六大原则

    什么是面向对象原则 面向对象原则——oop(object Oriented Principle),遵循原则设计程序...

  • 设计模式原则-开闭原则

    开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实...

  • 面向对象设计原则

    面向对象设计原则 面向对象设计原则概述[https://www.jianshu.com/p/57137d81c55...

  • 设计模式的原则

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

  • 六大设计原则详解(6)-开闭原则

    简介: 开闭原则(OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原...

网友评论

      本文标题:面向对象的设计原则

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