依赖倒置原则(DIP)

高层模块(稳定)不应该依赖于低层模块(变化),二者都应该依赖于抽象(稳定)
抽象(稳定)不应该依赖于实现细节(变化),实现细节应该依赖于抽象(稳定)

开放封闭原则(OCP)

对扩展开放,对更改封闭
类模板应该是可扩展的,但是不可修改

单一职责原则(SRP)

一个类应该仅有一个引起它变化的原因
变化的方向隐含着类的责任

Liskov替换原则(LSP)

子类必须能够替换他们的基类(IS-A)
继承表达类型抽象

接口隔离原则(ISP)

不应该强迫客户依赖他们不用的方法
接口应该小而完备

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

类继承通常为“白箱复用”,对象组合通常为“黑箱复用”
继承在某种程度上破坏了封装性,子类父类耦合度高
而对象组合只要求被组合的对象具有良好定义的接口,耦合度低

封装变化点

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

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

不将变量类型声明为某个特定的具体类,而是声明为某个接口
客户程序无需获取对象的具体类型,只需要知道对象所具有具有的接口
减少系统中各部分的依赖关系,从而实现“高内聚,松耦合”的类型设计方案

设计模式之八大设计原则相关推荐

  1. C++设计模式的设计原则(面向对象八大设计原则)

    面向对象设计八大设计原则 一.温故面向对象 二.八大设计原则 三.以史为鉴    先掌握八大设计原则,再详细看23种设计模式(

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

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

  3. 设计模式之六大设计原则【入门】

    设计模式之六大设计原则 1 开闭原则 Open Closed Principle,OCP 1.1 概念 1.2 软件实体 1.3 开闭原则的作用 2. 单一职责原则 Single responsibi ...

  4. 设计模式01-七大设计原则

    设计模式01-七大设计原则 文章目录 设计模式01-七大设计原则 开闭原则-Open Close 依赖倒置原则-Dependence Inversion 单一职责原则-Simple ResponsiB ...

  5. 设计模式的六大设计原则

    设计模式的六大设计原则 1. 开闭原则 1.1 开闭原则:Open Closed Principle,OCP 1.2 开闭原则的作用 2. 单一责任原则 2.1 单一职责原则:Single respo ...

  6. 设计模式 — 6大设计原则(依赖倒置和接口隔离原则)

    设计模式 依赖倒置原则 示例 一 示例 二 依赖的三种写法 总结 接口隔离原则 实例 一 总结 依赖倒置原则 依赖倒置原则(Dependence Inversion Principle,DIP)这个名 ...

  7. 软件设计模式-7种设计原则总结

    7 种设计原则是软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同.其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭:里氏替换原则告诉我们不要破坏继承体系:依赖倒置原则告诉我们要面向接口 ...

  8. [Design]设计模式-- 为什么要学习设计原则/模式

    首先来考虑一款软件系统的生命周期.任何事物都要经历两次创造过程,软件项目系统也不例外.系统设计师拿到系统的设计需求后,首先系统存在于设计者们的头脑中,然后存在于设计图纸上,然后变成原型系统,最后变成真 ...

  9. [转] 设计模式的六大设计原则

    转载说明: 感谢原作者吕震宇老师的分享. 原文参考链接:https://www.cnblogs.com/zhenyulu/category/6930.html? 本次转载只用于个人学习使用,并不涉及商 ...

最新文章

  1. docker 镜像重命名_Docker 镜像该怎么传
  2. WPS漏洞利用工具Bully常见命令集合
  3. POJ2688状态压缩(可以+DFS剪枝)
  4. TabLayout中的Tab.setCustomView左右有空隙,TabLayout下划线间隙设置,下划线长度设置
  5. python twisted教程_Python Twisted系列教程1:Twisted理论基础
  6. 快速学会php视频,PHP视频从入门到精通---适合PHP初学者
  7. Python 5 运算符
  8. 【课堂教学/课堂复习/课堂竞赛手段探析】给广大教师推荐一个期末课堂复习的最好办法
  9. 计算机三级网络技术无纸化考试模拟软件(2019.3 2019.9) 包含激活码 未来教育
  10. 随机数练习1,和电脑比roll点
  11. 番茄花园xp开机音乐_抱歉,Windows XP的开机音乐骗了你20年
  12. ThinkPad T14 Gen3拆机更换升级内存和固态硬盘
  13. 手写jQuery轮播图插件,即拿即用,更多接口,更少代码实现你想要的轮播图~~
  14. [转] 一些你不知道但是超美的地方,一定要去
  15. 数据库批量插入和存在的问题
  16. 高通SDX12平台:LINUX上MBIM功能异常
  17. 海信html501n手机,专为中老年人设计的智能手机,海信T50确实不简单
  18. 生物信息学python常用脚本_生物信息学一些基本的常用软件有哪些?
  19. 基于开源应用快速构建HTAP系统(2)-阿里云开发者社区
  20. 11.21 权利的游戏 冰与火之歌

热门文章

  1. 快速浏览Silverlight3 Beta:当HLSL遇上Silverlight
  2. js 闭包 实战1
  3. ZZULIOJ 1898: 985的数字难题 【水题】
  4. HttpClient4.4 登录知乎(详细过程)
  5. 一些关于找工作的书籍
  6. Java Coverage(Cobertura)工具
  7. 如何改变一个地图的Zoom单位
  8. Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
  9. 用欧几里得算法求最大公约数_欧几里得算法:GCD(最大公约数),用C ++和Java示例解释...
  10. JAVA动态读取xml_Java动态生成和解析xml文件步骤详解