设计模式七大原则

设计模式目的

为了让查询具有更好的

  1. 代码重用性(相同功能的代码, 不用多次编写)
  2. 可读性(编程规范性, 便于其他程序员的阅读和理解)
  3. 可拓展性(当需要增加新功能时, 非常方便, 可维护)
  4. 可靠性(新增功能后对原来的功能没有影响)
  5. 使程序呈现高内聚, 低耦合的特性

七大原则

  1. 单一职责原则
  2. 接口隔离原则
  3. 依赖倒转原则
  4. 里氏替换原则
  5. 开闭原则
  6. 迪米特法则
  7. 合成复用原则

单一职责原则

对类来说, 即一个类应该只负责一项职责, 如类A负责两个不同职责: 职责1, 职责2, 当职责1需求变更二改变A时, 可能造成职责2执行错误, 所有需要将类A的粒度分解为A1,A2

  1. 降低类的复杂度, 一个类只负责一项职责
  2. 提高类的可读性, 可维护性
  3. 降低变更引起的风险
  4. 通常情况下, 我们应当遵守单一职责原则, 只有逻辑足够简单, 才可以在代码中违反单一职责原则. 只有类中方法足够少, 才可以在方法级别保存单一职责原则

接口隔离原则

客户端不应该依赖他不需要的接口, 即一个类对另一个类的依赖应该建立在最小的接口上

依赖倒转原则

  1. 高层模块不应该依赖底层模块, 二者都应该依赖其抽象
  2. 抽象不应该依赖细节, 细节应该依赖抽象
  3. 抽象倒转的中心思想是面向接口编程
  4. 依赖倒转原则设计理念: 相对于细节的多变性, 抽象的东西要稳定的多, 以抽象为基础搭建的架构比以细节为基础的架构要稳定的多, 抽象值抽象类, 细节值具体体现的类
  5. 使用接口或抽象类的目的是制定好规范, 而不涉及任何具体的操作, 把展现细节的任务交给具体的实现类去完成

里氏替换原则

  1. 如果对每个类型为T1的对象o1, 都有类型为T2对象o2, 使得以T1定义的所有程序P在所有的对象o1都替换成o2时, 程序P的行为没有发生变化, 那么类型T2是类型T1的子类型, 所有应用积累的地方都必须能够透明的使用其子类的对象
  2. 在使用继承时, 遵循里氏替换原则, 在子类中尽量不要重写父类的方法
  3. 里氏替换原则告诉我们, 继承实际上是让两个类耦合性增加了, 在适当的情况下, 可以通过聚合, 组合, 依赖来解决问题

开闭原则

  1. 编程中最基础最重要的设计原则
  2. 一个软件实体类中, 模块和函数应该对扩展开放(对提供方), 对修改关闭(对使用方), 使用抽象构建框架, 用实现扩展细节
  3. 当软件需要变化时, 尽量通过扩展软件实体的行为来实现变化, 而不是通过修改已有的代码来实现变化
  4. 编程中遵循其他原则, 以及使用设计模式的目的就是遵循开闭原则

迪米特法则

  1. 一个对象应该对其他对象保持最少的了解
  2. 类与类关系越密切, 耦合度越大
  3. 迪米特法则又叫最少知道原则, 即一个类对自己依赖的类知道的越少越好, 对于被依赖的类不管多么复杂, 都尽量将逻辑封装在类的内部, 对外除了提供公共的方法, 不泄露任何信息
  4. 每个对象都会与其他对象有耦合关系, 只要两个对象直接有耦合关系, 我们就说这两个对象直接是朋友关系, 耦合的方式很多, 依赖, 关联, 组合, 聚合等, 其中我们称出现成员变量, 方法参数, 方法返回值中的类为直接朋友, 而出现在局部变量中中的不是直接的朋友, 也就是说, 陌生的类最好不要以局部变量的形式出现在类的内部

合成复用原则

  1. 尽量使用合成/聚合的方式 而不是使用继承
  2. 找出应用中可能需要变化之处, 把它们独立出来, 不要和那些需要变化的代码混合在一起
  3. 针对接口编程, 而不是针对实现编程
  4. 为了交互对象直接的松耦合设计而努力

七大原则归纳

设计原则归纳目的
开闭原则对扩展开放, 对修改关闭降低维护带来的新风险
依赖倒转原则高层不应该依赖底层, 面向接口编程更利于代码结构的升级扩展
单一职责原则一个类只干一件事, 实现类要单一便于理解, 提高代码的可读性
接口隔离原则一个接口只干一件事, 接口要简单功能解耦, 高内聚, 低耦合
迪米特法则不该知道的不要知道, 一个类应该保存对其他类最少的了解, 降低耦合只和朋友交流, 不和陌生人说话, 减少代码臃肿
里氏替换原则不要破坏继承体系, 子类重写方法功能发生变化不应该影响父类方法的含义防止继承泛滥
合成复用原则尽量使用组合或者聚合关系实现代码复用, 少使用继承降低代码耦合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值