• 设计模式七大原则


    设计模式的目的
    1. 代码重用性(相同功能的代码,不用多次重复编写)。
    2. 可读性高(便于阅读和理解)。
    3. 可扩展性(很方便支持修改,可维护性高)。
    4. 可靠性(运行稳定不出错,新增功能对原有功能不影响)。
    5. 程序呈现高内聚低耦合的特性。
    设计模式常用的七大原则:
    1. 单一职责原则
    2. 接口隔离原则
    3. 依赖倒转原则
    4. 里氏替换原则
    5. 开闭原则
    6. 迪米特法则
    7. 合称复用原则
    1、单一设计原则
    介绍

    对类来说,即一个类只负责一项职责。

    注意事项和说明
    1. 降低类的复杂度,一个类只维护一种职责
    2. 提高类的可读性,可维护性
    3. 降低变更引起的风险
    4. 类中方法足够少可以违反单一原则,类不用遵循单一原则,方法级别遵循单一原则即可。
    2、接口隔离原则
    介绍
    1. 客户端不应该依赖它不需要的接口,及一个类应该依赖最小接口。
    3、依赖倒转
    介绍
    注意事项和说明
    4、里氏替换原则
    思考分析
    1. 父类已经实现好的方法,实际上是在设定规范和契约。虽然不是强制要求子类遵循这些锲约,但是如果子类对这些已经实现的方法任意的修改,就会对继承体系造成破坏。
    2. 继承是在给程序设计带来便利的同时,也带来了弊端。比如使用继承带来侵入性,程序可以移植性降低,增加对象间的耦合性。
    介绍
    1. 如果每个类型为T1的对象O1.都有类型为T2的对象O2,使得以T1定义的所有程序P在所有的对象o1都迭代为o2时,程序的行为没有发生变化。那么T2是T1的子类型。

      引用基类的地方必须透明的使用其子类对象

    2. 使用继承时子类尽量不要重写父类的方法。

    3. 里氏替换原则,继承实际上让两个类的耦合性增强了。在适当情况下,可以通过聚合,组合,依赖来解决问题。

    注意事项和说明

    在实际编程中,我们常常回通过重写父类的方法完成新的功能,这样写起来虽然简单,但是整个继承体系的复用性会比较差。特别是运行多态比较频繁的时候。

    5、开闭原则
    基本介绍
    1. 开闭原则是编程中最基本,最重要的设计原则。
    2. 一个软件的实现例如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。
    3. 当软件需要变化时,尽量通过扩展软件实体的行为来实现变化。而不是通过修改已有的代码来实现变化。
    4. 编程中应该遵循其他设计原则,以及使用设计模式的目的就是遵循的开闭原则。
    6、迪米特法则
    基本介绍
    1. 一个对象应该对其他对象保持最少的了解。

    2. 类与类的关系越密切,耦合度越大。

    3. 迪米特法则(最少知道原则),一个类对自己依赖的类知道的越少越好。对于被依赖的类不管多么复杂,都因该尽量将逻辑封装在类的内部。

    4. 简化定义:只与直接朋友通信。

    5. 直接朋友?:每个对象都会有与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个类之间是朋友关系。

      耦合可能的方式

      • 依赖
      • 关联
      • 组合
      • 聚合

      其中我们称出现成员变量,方法参数,方法返回值中的类为直接朋友,而在局部变量中的类不是直接朋友。

    注意事项和细节
    1. 核心是降低类与类的依赖
    2. 注意:由于每个类之见减少了不必要的依赖,因此迪米特法则要求降低类间耦合关系,并没有要求依赖关系。
    合成原则
    基本介绍

    原则是尽量使用合成/集合的方式,而不是使用继承。

    设计原则核心思想
    1. 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。
    2. 针对接口编程,而不是针对实现编程。
    3. 为了交互对象之间的松耦合设计而努力。
  • 相关阅读:
    marMariaDB & MYSQL flexviews
    tomcat与resin的比较
    nginx 1.4.3能直接升到1.8.1吗
    Docker Compose vs. Dockerfile
    分布式事务 spring 两阶段提交 tcc
    linux下拷贝整个目录
    MySQL :: Fatal error: Can't change to run as user 'mysql'. Please check that the user exists!
    python Drools
    KubeCon CloudNativeCon China 2019
    在mysql中修改表名的sql语句
  • 原文地址:https://www.cnblogs.com/JunQiang-Ma/p/14556365.html
Copyright © 2020-2023  润新知