设计模式的六大原则(个人笔记)
一、单一职责原则
单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个 引起它变化的原因。
就是说一个类不能太”累“,一个类承担的责任越多,它被复用的肯能性就越小,而且一个类承担的责任过多,就相当于将这些职责耦合在一起,
当其中一个职责变化时,可能会影响到其他职责的运作,因此要将这些职责分离,封装在不同的类中。
单一职责的原则就是:实现高内聚、低耦合的指导方针,它是简单但是又难运用的原则,需要设计人员发现类的不同职责将其分离,而发现类的多重职责需要设计人员具有较强的
分析能力和设计能力和相关实践经验。
二、开闭原则
开闭原则:一个软件实体可以指一个应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
在开闭原则的定义中,一个软件实体可以指一个软件模块,一个由多个类组成的局部结构或一个独立的类。
为了满足开闭原则,需要对系统进行抽象设计,抽象化是开闭原则的关键。可以定义一个相对稳定的抽象层,在通过具体类来进行扩展,
如果有需要改动系统的行为,无需对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。
三、里氏替换 原则
里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。
里氏替换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。
如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;
但是我喜欢狗,不能断定我喜欢动物。
里氏替换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来定义对象 ,
而在运行时再确定其子类类型,用子类对象来替换父类对象。
四、依赖倒置原则
依赖倒置原则:抽象不应该依赖于细节,细节应当依赖于抽象。
如果说开闭原则是面向对象设计的目标的话 ,那么依赖倒置原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。
依赖倒置原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用高层次的抽象层类,即使用接口和抽象类进行变量类型声明、方法返回类型声明,
以及数据类型的转换等,而不要用具体类来做这些事情。为了确保该原则的应用,一个具体类应当实现接口和抽象类中声明过的方法,而不要给多余的方法,
否则将无法调用到子类中增加的新方法。
在实现依赖倒置原则时,我们需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中,依赖注入是指当一个对象要与其他对象发生依赖关系时,
通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入和接口注入。构造注入是指通过构造函数来传入具体类的对象,设值注入是指通过Setter
方法来传入具体类的对象,而接口注入是指通过在接口中声明的业务方法来传入具体类的对象。这些方法在定义时使用的是抽象类型,在运行时再传入具体类型的对象,由子类对象覆盖父类对象。
五、接口隔离原则
每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
接口仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来,应当为客户端提供尽可能小的单独的接口,而不要提供大的接口。
但是接口不能太小,如果太小会导致系统中接口泛滥,不利于维护。
六、迪米特法则
迪米特法则:一个软件实体应当尽可能少的与其他实体发生相互作用。
迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。
迪米特法则还有几种定义形式,包括:不要和“陌生人”说话,只与你的直接朋友通信等。
其朋友包括以及几类:
(1)当前对象本身
(2)以参数形式传入到当前对象方法中的对象
(3)当前对象的成员对象
(4)如果当前对象的成员对象是一个集合,那么集合中的元素也是朋友
(5)当前对象所创的对象
任何一个对象,如果不满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”。
迪米特法则要求我们在设计系统时,应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,
如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。简而言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。
在将迪米特法则运用到系统设计中时,要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,
不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;
在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。
转载于:https://www.cnblogs.com/BounceGuo/p/9724969.html
设计模式的六大原则(个人笔记)相关推荐
- 【设计模式 00】设计模式的六大原则
设计模式的六大原则 参考: 设计模式六大原则 1. 单一职责原则 一个类只负责一个明确的功能 优点: 降低类的复杂度,提高代码可读性和可维护性 降低变更时对其他功能的影响 2. 里氏替换原则 **原则 ...
- 神了!有人用一个项目把23种设计模式与六大原则融会贯通了
前言 设计模式分为三类,创建型,结构型和行为型.创建型比较好理解,它抽象了实例化过程,将系统与实例的创建解耦.实例由专门的工厂来创建,从而使系统针对实例的抽象接口编程,不依赖任何具体的实现.结构型和行 ...
- 如何理解设计模式的六大原则?
我们知道,java中有类,父类,抽象类,接口这些概念,而设计模式的六大原则就解释了它们及其它们之间的关系是怎样的,接下来我们将由简到难一一剖析. 开闭原则:是总纲,他告诉我们要对扩展开放,对修改关闭. ...
- 设计模式的六大原则(SOLID)
设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Pr ...
- unity 项目开发——浅谈设计模式的六大原则(一)
目录 前言 首先,六大原则是谁? 其次,为什么需要学习这六大原则? 正文 一.单一职责原则 示例: 因此我们需要进行拆分,根据具体的职能可将其具体拆分如下: Unity 单一职责原则 二.开闭原则 U ...
- 设计模式的六大原则。简称:SOLID
设计模式的六大原则.简称:SOLID 迪米特法则(Law of Demeter):如果两个类之间并不需要直接通信,那么就不应该让这两个类相互作用.又叫作最少知识原则 迪米特法则的定义是:只与你的直接朋 ...
- 「设计模式」六大原则之三:里氏替换原则小结
文章目录 1.里式替换原则定义 2. 举例说明 示例1: 示例2: 3. 哪些代码明显违背了 LSP? 子类违背父类声明要实现的功能 子类违背父类对输入.输出.异常的约定 子类违背父类注释中所罗列的任 ...
- (转)设计模式之六大原则
源地址:http://blog.csdn.net/scboyhj__/article/details/47844639 1. 单一职责原则 -Single Responsibility Princip ...
- 【设计模式】——六大原则
◎原则之间的关系◎ 开闭原则是目标,里氏转换原则是基础,依赖倒转原则是手段.六大原则追求的目标都是,可扩展,复用性强,灵活性高,容易维护,耦合度低. ★★单一职责原则★♬★ 定义:就一个类而言,应该仅 ...
- 何红辉设计模式之六大原则
这篇文章总结的很到位: https://www.jianshu.com/p/807bc228dbc2 欢迎去阅读 设计模式六大原则 ,简称:solid 1.Single Responsibility ...
最新文章
- 毫米波雷达的市场格局及后续发展趋势
- 流利说统一可观察性平台实践
- boost::is_convertible相关的测试程序
- Leetcode 14.最长公共前缀
- 文件操作(解密加密)
- Android开发常用工具推荐
- mysql-安装包模式的安装过程-旧版
- 引物设计软件primer_常用生物学软件的安装与应用(三)—Primer6
- 在 Windows Server 2008 R2 下用 Visual Studio 2010 编译 Chrome 与 WebKit Chromium Port
- ubuntu 16.04 登录后黑屏
- AJAX异步实现简单的瀑布流
- 1177: 按要求排序(指针专题)_排序算法之快速排序
- C# Log4Net简单使用方法
- JS中Ajax的方法和应用
- 【毕业设计】基于Android的家校互动平台开发(内含完整代码和所有文档)——爱吖校推(你关注的,我们才推)...
- java根据距离算经纬度_java 根据两点经纬度来算距离
- GSM/GPRS之一-GSM基础知识
- 如何获取任意小程序的AppId和页面路径?
- D - The Lucky Week ZOJ - 3939 (思维)
- rtl8188linux内核配置,编译基于rtl8188cu控制芯片的USB无线网卡在Linux下的配置