目录

设计模式之遵循原则

1. 单一职责原则(SRP)

1.1 设计目的

1.2 定义

1.3 应用

2. 开放-封闭原则(OCP)

2.1 设计目的

2.2 定义

2.3 应用

3. 依赖倒转原则

3.1 设计目的

3.2 定义

3.3 应用

4. 迪米特法则(LoD,最少知识原则)

4.1 设计目的

4.2 定义

4.3 应用


设计模式之遵循原则

注:以下内容均参考《大话设计模式》。

1. 单一职责原则(SRP)

1.1 设计目的

我们在做编程的时候,会很自然的给一个类添加各种各样的功能,比如我们写一个窗体应用程序,一般都会生成一个Form这样的类,于是我们就把各种各样的代码,像商业运算的算法,像数据库访问的SQL语句都写入到该类中,这样意味无论任何需求要来,你都需要改变这个窗体类,这样维护麻烦,无法复用,缺乏灵活性。

所以我们在设计一个类时,要遵循单一职责,让类具备原子化属性。

1.2 定义

就一个类而言,应该仅有一个引起它变化的原因。

1.3 应用

设计俄罗斯方块:

  1. 分别设计3个窗体的Form类, WallForm(背景容器), NewShapeForm(新产生的形状), ResultShapeForm(最终组合的形状),输入参数,横纵坐标,和形状代码。
  2. 设计Operation类,用于产生随机的NewShape的输入参数,产生改变形状的code,挪移的输入横纵坐标,获取Form的当前位置,已经最后合并操作等属性。

2. 开放-封闭原则(OCP)

2.1 设计目的

在设计模式中,软件系统给架构更新,不破坏原有的软件内容去扩展新的内容,从而对旧版本软件兼容 。而不至于说,新的需求一来,就要把整个程序推倒重来。

2.2 定义

是指软件实体(类、模块、函数等)应该可以扩展,但是不可以修改。用人话就是,软件实体具有可扩展性,已经设计好的内容不用再去修改,这样就支持旧版本的兼容。(多扩展,少修改)

但无论模块是多么的封闭,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员就必须对于他设计的模块应该对哪种封闭做出选择。他必须先猜测出最有可能发生的变化种类。然后构造抽象来隔离那些变化。需求的变化很难预测,但我们可以在发生很小的变化时就采取行动

在我们最初写代码是,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。

我们希望的是在开发工作展开不久就知可能发生的变化。查明可能发生的变化所灯带的时间越长,要创建正确的抽象就越困难。

!!!开发人员应该仅对程序中呈现出频繁变化的那些部分做出抽象。对于应用程序中每个部分都刻意地进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象本身一样重要。过犹不及。

2.3 应用

以计算器程序为例:

  1. 首先在一个类中设计了一个加法函数功能。
  2. 然后再添加一个减法的需求,此时就需要考虑重构,抽象一个运算类,加法和减法都是运算类的子类。
  3. 最后又追加了一个乘除的需求,此时只需要再分别添加乘法和除法的子类,就可以完成业务,而不用修改现有的代码。

3. 依赖倒转原则

3.1 设计目的

为了让对象强内聚,对象和对象之间松耦合。解决模块与指定模块的强耦合关系。比如,一厂家内存条插口只能给自己的定制的主板使用,因为主板和内存条是定制的接口,不是符合市面上标准接口,主板就无法再用其他厂家的内存条了。所以这个原则应运而生。定义一个大家都使用的接口。

3.2 定义

a) 高层模块不应该依赖低层模块。两个都应该依赖抽象。用人话就是高层模块使用低层模块也只是使用低层模块的接口或抽象类,这样当低层模块所代表的子类对象改变时,高层模块并不会受到影响。另外,高层模块也应是一个抽象的接口或抽象类。增加高层模块的复用性和灵活性。这里的高层模块和低层模块都是那些频繁使用的模块

b) 原话解释是抽象不应该啊依赖于细节,细节应该依赖于抽象。说白了就是针对接口编程,而不是对实现编程,不管是大模块还是小模块

3.3 应用

以设计建筑模块(欧式或中式)为例:

1. 抽象一个建筑模块Building, 派生子类EuropeanBuilding或ChinneseBuilding,也可以两个都派生。

2. 抽象一个内部房间模块Room, 派生子类EuropeanRoom或ChineseRoom,也可以都派生。

3. 为了在Building中灵活选择内部房间类型Room, 两个子类中都添加Art 属性,并赋予相应的中式还是欧式作为内部装修方式。

4. 这样,在使用建筑模块的时候,就可以灵活选择模式,即  “中式建筑+中式room,中式建筑+欧式Room, 欧式建筑+中式Room, 欧式建筑+欧式Room”。

4. 迪米特法则(LoD,最少知识原则)

4.1 设计目的

降低类之间的耦合

4.2 定义

如果两个类不必彼此直接发生通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以欧谈过第三者转发这个调用。

迪米特法则首先强调的前提是在类的结构设计上,每一个类都应该尽量降低成员的访问权限。其根本思想是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。

4.3 应用

C++ 设计模式之遵循原则相关推荐

  1. 设计模式中遵循的原则:单一职责、开发-封闭、依赖倒转

    设计模式中遵循的原则:单一职责.开放-封闭.依赖倒转 单一职责原则 一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会消弱或者抑制这 ...

  2. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  3. Java设计模式-七大设计原则

    Java设计模式 设计模式七大原则 设计模式的目的 编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有更好 代码 ...

  4. 设计模式_01_单一原则

    设计模式_01_单一原则 package designPatternOf_01; /*** 单一原则示例:动物呼吸* 引入的问题:鱼不吸空气,吸水*/ public class SinglePrinc ...

  5. 【设计模式 00】设计模式的六大原则

    设计模式的六大原则 参考: 设计模式六大原则 1. 单一职责原则 一个类只负责一个明确的功能 优点: 降低类的复杂度,提高代码可读性和可维护性 降低变更时对其他功能的影响 2. 里氏替换原则 **原则 ...

  6. 实践GoF的23种设计模式:SOLID原则(上)

    本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题. ...

  7. 代码规范七大原则_设计模式的七大原则详解||上篇

    Hello 丨World  当机会变得稀有,当竞争变得激烈 当方向不再清晰,当风口不再有风 关键词||设计模式 全文约7685字,细读大约需要20分钟 1 认识设计模式 1.1 什么是设计模式 所谓设 ...

  8. 面试官问你如何进行程序设计?——设计模式之七大原则——接口隔离、合成复用、迪米特法则以及C++设计实现

    设计模式的设计原则之2.0 七大原则 5.接口隔离(InterfaceSegregation Principle,ISP) 5.1.背景 5.2.定义 5.3.特征 5.4.应用 6.迪米特原则(La ...

  9. 设计模式的六大原则(SOLID)

    设计模式的六大原则有: Single Responsibility Principle:单一职责原则 Open Closed Principle:开闭原则 Liskov Substitution Pr ...

最新文章

  1. 集群概述及原理笔记(1)
  2. AMD依然yes!官宣锐龙5000系列CPU,单核性能首次超越英特尔,苏妈:最好的游戏CPU!...
  3. java学习笔记(三)----成员权限,构造函数,this用法
  4. tf.unstack\tf.unstack
  5. c语言大作业菜单,C语言大作业:编写菜单控制猜商品价格程序
  6. 97 岁诺奖得主的励志人生:本科学文学,博士转物理,54 岁才开始锂电池研究...
  7. XCTF-高手进阶区:i-got-id-200
  8. java 多线程 28 : 多线程组件之 Semaphore 信号量
  9. mysql视图子查询_MySQL:FROM子句限制中的带有子查询的视图
  10. paip.navicat form mysql导入文本文件时CPU占用100%的解决
  11. Linux屏幕取词翻译 - 思路及实现过程
  12. 合并两个有序数组C++
  13. U盘写保护,量产工具修复。
  14. 如何卸载 3DMAX ?怎么把3DMAX彻底卸载删除干净重新安装的方法
  15. wakeonlan 远程唤醒开机软件(网络唤醒)
  16. PACP学习笔记三:PCAP方法说明
  17. 关闭 Eureka 自我保护模式
  18. 小的以及大的Typhon IDE
  19. VSCode常用插件和快捷键总结
  20. 51单片机c语言算法大全,51单片机C语言实例(350例)Proteus仿真和代码都有

热门文章

  1. 开源监控解决方案WGCLOUD - 如何监测摄像头的状态
  2. one morning of Saturday
  3. 2021年高压电工复审模拟考试及高压电工考试试题
  4. python-时间序列之ADF检验(1)
  5. 猿人学平台练习题第九题(sojson+混淆)
  6. 亚马逊知识局:亚马逊新品第一个月应该如何运营推广?
  7. Linux自动切换用户脚本,自动输入用户名密码
  8. 介绍一项让 React 可以与 Vue 抗衡的技术
  9. 【Web渗透】Web渗透各类型问题总结
  10. Excel 2010 VBA 入门 106 带参数的过程