c++设计八大原则(降低改变带来的代码修改)

一.依赖倒置原则(DIP)

1.高层模块(稳定)不应该依赖于低层模块(变化),二者应该依赖于抽象(更稳定)

<高层模块 包括 低层模块所依赖的抽象,而不是低层模块的本身,而其本身也依赖于自身抽象模块>

2.抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)

<抽象本身不应该依赖于低层的细节变化,否则会消除抽象的稳定性 (抽象类不应该调用子类函数),应该将低层变化的细节依赖于抽象的稳定中去>

二.开放封闭原则(OCP)

1.对扩展开放,对更改封闭

2.类模块应该是可扩展的,但不可修改

<类模块可以进行拓展,但不要进行修改(添加远远好于在原来基础上修改>

三.单一职责原则(SRP)

1.一个类应该仅有一个引起它变化的原因

2.变化的方向隐含着类的责任

<一个类责任要单一,不应该拥有过多的责任,使类本身被四处拉扯>

四.Liskov替换原则(LSP)

1.子类必须能够替换它们的基类(IS-A)

2.继承表达类型抽象

<考虑一个类继承于某个父类的时候,一定要满足IS-A的关系,不可随意继承>

五.接口隔离原则(ISP)

1.不应该强迫客户程序依赖它们不用的方法

2.接口应该小而完备

<对接口应该严格管理对外的权限,做到小而完备>

六.优先使用对象组合,而不是类继承

1.类继承通常为“白箱复用”,对象组合通常为“黑箱复用”

2.继承在某种程度上破坏了封装性。子类父类耦合度高

3.而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低

<不要过度依赖于继承,有时候对象组合也许才是更好的选择>

七.封装变化点

1.使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另外一侧产生不良的影响,从而实现分界层次间的松耦合

<理解变化点和分界层,进一步松耦合>

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

1.不将变量类型声明为某个特定的具体类,而是声明为某个接口。·客户程序无需获知对象的具体类型,只需要知道对象所具有的接口

2.减少系统中各部分的依赖关系,从而实现“高内聚、松耦合”的类型设计方案。

<接口标准化!多用接口不直接使用内部数据>

c++设计模式:设计原则的更多相关文章

  1. 设计模式-设计原则(Design Principle)

    本文由@呆代待殆原创,转载请注明出处. 写在前面:所谓设计原则并不是一定要遵守的法则,只是一种建议,因为保持这些原则本身会有一定代价,若是这些代价超过了带来的好处就得不偿失了,所以一切还是以简单为准. ...

  2. Python设计模式——设计原则

    1.单一职责原则:每个类都只有一个职责,修改一个类的理由只有一个 2.开放-封闭远程(OCP):开放是指可拓展性好,封闭是指一旦一个类写好了,就尽量不要修改里面的代码,通过拓展(继承,重写等)来使旧的 ...

  3. JAVA设计模式-设计原则

    6大原则: 单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 一.单一职责原则 定义:应该有且仅有一个原因引起类的变更 带来的好处: 类的复杂性降低,实现什么职责有清晰明确 ...

  4. .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记

    目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...

  5. AngularJS_01之基础概述、设计原则及MVC设计模式

    1.AngularJS: 开源的JS框架,用来开发单一页面应用,以及数据操作频繁的场景:2.设计原则: ①YAGNI原则:You Aren't Gonna Need It! 不要写不需要的代码! ②K ...

  6. java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

    在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设 ...

  7. IOS设计模式的六大设计原则之开放-关闭原则(OCP,Open-Close Principle)

    定义 一个软件实体(如类.模块.函数)应当对扩展开放,对修改关闭. 定义解读 在项目开发的时候,都不能指望需求是确定不变化的,大部分情况下,需求是变化的.那么如何应对需求变化的情况?这就是开放-关闭原 ...

  8. [JAVA设计模式]第一部分:接口、抽象类、设计原则

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 连载:面向对象的葵花宝典:思考、技巧与实践(39) - 设计原则 vs 设计模式

    它的设计原则,和设计模式,是否该用它? ============================================================================= 在& ...

  10. JAVA设计模式总结之六大设计原则

    从今年的七月份开始学习设计模式到9月底,设计模式全部学完了,在学习期间,总共过了两篇:第一篇看完设计模式后,感觉只是脑子里面有印象但无法言语.于是决定在看一篇,到9月份第二篇设计模式总于看完了,这一篇 ...

随机推荐

  1. 直接在jsp页面上使用flex标签

    1:去ADOBE下载FLEX的TAGLIB for JSP. http://download.macromedia.com/pub/labs/flex2_tag_library_jsp/flex2_t ...

  2. 国产化适配——银河麒麟V10(1)

    前言 为响应国家"信创"建设,公司最近在搞国产化适配,我刚好负责这搞一部分,做个记录吧. 主要包括三块:国产服务器操作系统银河麒麟V10,国产数据库人大金仓kingbase,中间件 ...

  3. Qt 设置快捷键

    Qt设置快捷键 本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷. 文章目录 Qt设置快捷键 一.需要的类 QShortcut 函数: 二.设置快捷键 官方文档原文翻译: 我的理解: 一.需要的 ...

  4. C#学习日记

    2023年9月9日 工具visual stdio 2019 窗口名称修改 lable标签 button 点击事件 点击换颜色 formLearn.ActiveForm.BackColor = Colo ...

  5. Ubuntu 24.04 安装 Python 2.7

    Ubuntu 24.04 对 Python 2.7 的维护已经停止了,因此 Python 2.7 已从 Ubuntu 24.04 软件包移除.如果想要安装 Python 2.7,需要我们自己从 Pyt ...

  6. Ubuntu 安裝 RIME 輸入法

    RIME (Rime Input Method Engine,中州韻,中州韵)是一款很火的輸入法,虽然我目前还不知道它为什么火,不过先用用再说. 首先要吐槽一下 RIME 的说明文档,我感觉有点乱,第 ...

  7. Postman Code Java-Unirest 代码的依赖

    本来是Postman的Code直接使用的,结果根据这个名字 Unirest,搜出来了很多依赖,使用了排名第一的, https://search.maven.org/search?q=Unirest 结 ...

  8. 全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

    全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法 摘要: 在 Python 中,内置类型的行为是通过一组特殊的"魔法方法"来实现的, ...

  9. Vue3比Vue2快的体现-第二部分

    这部分主要说两个方面,1是静态提升,2是事件监听缓存 静态提升意思就是说,在以往Vue执行函数的时候,无论是绑定数据的节点还是没有绑定的,都会在render函数执行的时候重新渲染,如下代码所示 imp ...

  10. 26.删除有序数组中的重复项 Golang实现

    题目描述: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.元素的 相对顺序 应该保持 一致 .然后返回 nums 中唯 ...