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

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

设计模式六大原则

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



单一职责原则

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


开闭原则

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


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


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


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


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


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

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


里式替换原则指将一个基类对象替换成它的子类对象,程序将不会产生任何错误。

子类只能重写父类的抽象方法,不能覆盖父类的非抽象方法,可增加自己的方法。

当子类的方法重载父类的方法时,方法的前置条件(即方法的输入/入参)要比父类方法的输入参数更加宽松。方法的后置条件(即方法的输出/返回值)相反。

迪米特法则

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


优先考虑将一个类设置成不变类。

尽量降低一个类的访问权限。   

谨慎使用Serializable。   

尽量降低成员的访问权限。

接口隔离原则

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


接口尽量小,但是要有限度。接口小提升灵活性,接口多增加复杂性。

只暴露给调用的类它需要的方法,它不需要的方法则隐藏起来。

接口用最少的方法去完成最多的事情

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

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

抽象不应该依赖细节

细节应该依赖抽象


相关文章
|
3月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
3月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
2月前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
设计模式——设计模式简介和七大原则
|
5月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
5月前
|
设计模式
设计模式六大原则之依赖倒置原则
设计模式六大原则之依赖倒置原则
|
3月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
3月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
3月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
5月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
40 2
|
5月前
|
设计模式 Java 数据库
深入理解设计模式六大原则
深入理解设计模式六大原则

热门文章

最新文章

  • 1
    C++一分钟之-设计模式:工厂模式与抽象工厂
    42
  • 2
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    46
  • 3
    C++一分钟之-C++中的设计模式:单例模式
    54
  • 4
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    38
  • 5
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    62
  • 6
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    57
  • 7
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    41
  • 8
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    50
  • 9
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    106
  • 10
    Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
    78