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. B. BerSU Ball

    B. BerSU Ball 排序后考虑\(dp\),\(dp_{i,j}\)表示前\(i\)个男生和前\(j\)个女生能匹配的最大数. \[\begin{aligned} if(|a_i - b_j| ...

  2. Camera | 9.如何让camera支持闪光灯?-基于rk3568

    一.闪光灯基本原理 工作模式 Camera flash led分flash和torch两种模式. flash: 拍照时上光灯瞬间亮一下,电流比较大,目前是1000mA,最大电流不能超过led最大承受能 ...

  3. [计算机网络] IPv6

    1 IPv6 概述 引言 近期突发奇想,能不能用 IPv6 的公网地址,给家里的 NAS 做 内网穿透. 技术上是可行的.只是必须确保是 IPv6 的公网地址. 大学学的 IPv6 的知识,早就抛到九 ...

  4. 实用接地气的 .NET 微服务框架

    前言 微服务架构已经成为搭建高效.可扩展系统的关键技术之一,然而,现有许多微服务框架往往过于复杂,使得我们普通开发者难以快速上手并体验到微服务带了的便利.为了解决这一问题,于是作者精心打造了一款最接地 ...

  5. Homebrew 卸载 Wireshark 报错

    我在使用 Homebrew 安装 Wireshark 的时候,Homebrew 要求我输入密码.此时我又不想安转 Wireshark 了,于是我没有输入密码并且按下了 Ctrl + C.后来,我又尝试 ...

  6. 阿里云 SLS 模糊查询日志

    查询包含test前缀的词 1. 访问 https://sls.console.aliyun.com/lognext/profile 2. 在Project列表中找到对应的sls日志Project 3. ...

  7. 肉夹馍(Rougamo)4.0.1 异步方法变量调试修复与IoC系列扩展

    肉夹馍(https://github.com/inversionhourglass/Rougamo),一款编译时AOP组件,无需在应用启动时进行初始化,也无需繁琐的配置:支持所有种类方法(同步和异步. ...

  8. ICMAN液位检测方案

    TA是什么? ICMAN液位检测是基于双通道比较电容式液位检测原理,来判断容器中是否有液体或者液体是否达到一定高度. 有什么用? ICMAN液位检测可以实现非接触式检测,起到高低.不同液位提醒.缺水提 ...

  9. 【YashanDB知识库】virt虚拟内存远大于res内存问题分析

    YASDB内存占用简介 参数配置: 默认参数配置:DBMS_PARAM高级包生成配置参数 数据库内存配置,使用默认参数步骤: 1.DBMS_PARAM.OPTIMIZE(); //生成默认参数,使用总 ...

  10. Servlet—— urlPattern配置

    Servlet urlPattern配置   Servlet要想被访问,必须配置其访问路径(urlPattern)   1.一个Servlet可以配置多个 urlPattern        2.ur ...