设计模式概念目的及七大原则基本介绍

简介: 设计模式概念目的及七大原则基本介绍

1.设计模式


概念:对软件开发过程中普遍存在的各种问题所提出的解决方案。


2.设计模式的目的


是程序拥有更好的:


代码重用性 (即:相同功能的代码,不用多次编写)

可读性 (即:编程规范性,  便于其他程序员的阅读和理解)

可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)

可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)

使程序呈现高内聚,低耦合的特性

3.设计模式七大原则


1.单一职责原则


2.接口隔离原则


3.依赖倒置原则


4.里氏替换原则


5.开闭原则


6.迪米特原则


7.合成复用原则


3.1 单一职责原则


对类来说,即一个类只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2。比如用于汽车在公路行驶,飞机在天空飞行,轮船在。。。。不同的交通工具调用不同的run()方法。


注意事项:


降低类的复杂度,一个类只负责一项职责。

提高类的可读性,可维护性

降低变更引起的风险

通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则


3.2  接口隔离原则


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


实例:

d5776823e6c26090fc202efade5417f.png



遵循接口隔离改进后:


5790330956d03f1a4ca4523530579a6.png



3.依赖倒转原则


基本介绍:


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

抽象不应该依赖细节,细节应该依赖抽象

中心思想是面对接口编程。

使用接口或抽象类的目的是制定好规范,把展现细节的任务交给他们的实现类去完成。

依赖倒转原则是基于这样的设计理念:相对于细节的多变性,抽象的东西要稳定的多。以抽象为基础搭建的架构比以细节为基础的架构要稳定的多。在 java 中,抽象指的是接口或抽象类,细节就是具体的实现类

依赖关系传递的三种方式:


接口传递

构造方法传递

setter方式传递

注意事项:


低层模块尽量都要有类或接口,或者两者都有,程序稳定性更好

变量的声明类型尽量是类或者接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,有利于程序扩展和优化

继承时遵循里氏替换原则

4.里氏替换原则


对于面对对象的思考:


继承包含这样一层含义:父类中凡是已经实现好的方法,实际上是在设定规范和契约,虽然它不强制要求所有的子类必须遵循这些契约,但是如果子类对这些已经实现的方法任意修改,就会对整个继承体系造成破坏。

继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低, 增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障

问题提出:在编程中,如何正确的使用继承? => 里氏替换原则

基本介绍:


如果对每个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,那么类型 T2 是类型 T1 的子类型。换句话说,所有引用基类的地方必须能透明地使用其子类的对象。

在使用继承时,遵循里氏替换原则,在子类中尽量不要重写父类的方法。

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

5.开闭原则


开闭原则是编程中最基础,最重要的设计原则

一个软件实体如类,模块和函数应该对扩展开放(对提供功能的一方),对修改关闭(对使用方)。用抽象构建框架,用实现扩展细节。

增加一个功能时,尽量去扩展而不是修改。

设计模式的目的就是遵循开闭原则。

6.迪米特法则


基本介绍


一个对象应该对其他对象保持最少的了解

类与类关系越密切,耦合度越大

迪米特法则(Demeter Principle)又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的 public 方法,不对外泄露任何信息

迪米特法则还有个更简单的定义:只与直接的朋友通信

直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部。

迪米特法则注意事项和细节


迪米特法则的核心是降低类之间的耦合

但是注意:由于每个类都减少了不必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系, 并不是要求完全没有依赖关系

7.合成复用原则


基本介绍:


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

df1e2750d2cb0fce1a155e1d519ad97.png





设计原则核心思想

找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

针对接口编程,而不是针对实现编程。

为了交互对象之间的松耦合设计而努力


相关文章
|
12天前
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
5月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
5月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
7月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
7月前
|
设计模式
设计模式六大原则之依赖倒置原则
设计模式六大原则之依赖倒置原则
|
4月前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
|
5月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
5月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
5月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
5月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解