• 设计模式六大原则 节选自《闻缺陷则喜》(此书可免费下载)


    1.1     设计模式六大原则

    单一职责原则 Single Responsibility Principle,开闭原则 Open-Closed Principle 里氏代换原则 Liskov Substitution Principle迪米特法Law of Demeter接口隔离原则Interface Segregation Principle 依赖倒置原则Dependence Inversion Principle,可以记为SOLID。

    1.1.1 单一职责原则

    定义:不要存在多于一个导致类变更的原因。问题由来:类C有两个成员函数F1、F2负责职责P1、P2,由于P1发生变化对F1进行了修改,对F1修改可能使原本正常运行的F2发生故障。职责扩散,职责P被分为职责P1和P2。解决方法:两个类C1、C2分别对应P1、P2。DAO(数据存储对象)模式,一个类的对应一个数据库的表,四个函数分别对应增删查改。之所以不是4个类分别对应增删查改,是因为最可能的修改的原因是:表结构发生变化。这种情况下增删查改都需要修改。

    1.1.2 开闭原则

    一个软件实体应当对扩展开放,对修改关闭。通俗的说:可以增加接口和修改的接口的实现;不能删除、修改接口。  常见方法:

     抽象约束抽象。a,通过接口或抽象类约束扩展;b,参数类型、引用对象尽量使用接口或者抽象类;c,抽象层尽量保持稳定。

     元数据,通俗地说就是配置参数,参数可以从文件中获得,也可以从数据库中获得。

     制定项目章,章程优于配置。

     封装变化,比如将某种可能的变化封装成类。

    1.1.3 克服继承的缺点——里式替换原则

    矩形类有两个成员函数:设置长和宽;正方形派生于矩形,重写了这两个函数,以确保长宽相等。某函数形参是矩形,实参是正方形,长宽分别设置成4和2,结果是:长宽都是2。

    • 里式替换原则指将一个基类对象替换成它的子类对象,程序将不会产生任何错误。
    • 子类只能重写父类的抽象方法,不能覆盖父类的非抽象方法,可增加自己的方法。
    • 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更加宽松。方法的后置条件(即方法的输出/返回值)相反。

    1.1.4 迪米特法则

    迪米特法则的定义是:只与你的直接朋友交谈。直接朋友:成员变量、方法的输入输出参数、返回值中的类。非直接朋友:局部变量、直接朋友的成员变量。常用原则:

    • 优先考虑将一个类设置成不变类。
    • 尽量降低一个类的访问权限。   
    • 谨慎使用Serializable。   
    • 尽量降低成员的访问权限。

    1.1.5 接口隔离原则

    定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。反例:不同的用户使用一个大接口。注意:

    • 接口尽量小,但是要有限度。接口小提升灵活性,接口多增加复杂性。
    • 只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。
    • 接口用最少的方法去完成最多的事情
    • 高层模块不应该依赖低层模块,两者都应该依赖其抽象
    • 抽象不应该依赖细节
    • 细节应该依赖抽象

    1.1.6 面向接口编程—依赖倒置原则

    2021年目标:完成新书《闻缺陷则喜》,B站有视频。
  • 相关阅读:
    mvc3在各个IIS版本中的部署
    linq学习
    常用的正则表达式
    Jenkins+Git+Maven+Tomcat的初步学习
    12个用得着的JQuery代码片段
    JQuery原理介绍及学习方法
    【前端学习】javascript面向对象编程(继承和复用)
    c# throw和throw ex
    .net 信息采集ajax数据
    C# FileSystemWatcher 并发
  • 原文地址:https://www.cnblogs.com/he-zhidan/p/14883084.html
Copyright © 2020-2023  润新知