1.从面向对象说起

~~~~~~      变化是代码复用的天敌,面向对象的设计语言的优势就是抵御变化!这里的所谓抵御变化,不是说采用面向对象的设计语言,就没有变化,而是将变化的范围降到最小。
~~~~~~      之前我们所认识的面向对象的语言,具有封装、继承和多态三大特性,但这是面向对象的底层思维;
~~~~~~      从抽象思维认识面向对象,它首先要能隔离变化:从宏观的角度来看,面向对象的语言更能适应软件带来的变化,将这种变化的影响降到最低,
~~~~~~      其次面向对象要求各个类之间各司其职:从微观的角度来看,面向对象更强调各个类各个承担的责任,各个类之间各司其职,变换导致的新增类型不应该影响原有的类,一般使用C++多态机制实现这种“各司其职”,接口一致,但是实现不一。

2.对象究竟是什么?

~~~~~~      从语言的角度来看,对象封装了代码和数据;
~~~~~~      从规格的角度来看,对象是一系列的可被使用的公共接口;
~~~~~~      从概念的角度来看,对象是某种拥有责任的抽象

3.面向对象的设计原则(8个)

~~~~~~       1.依赖倒置原则
~~~~~~~~~~          高层模块不应该依赖于低层模块,二者都应该依赖于抽象;
~~~~~~~~~~          抽象不应该依赖于实现细节,而实现细节应该依赖于抽象;

这里的高层模块可以理解为父类,低层模块可以理解为子类,抽象可以理解为抽象类,
实现细节可以理解为具体的虚函数功能实现。这句话就是说父类不应该依赖子类,它们都要依赖抽象类,
抽象类中不要有具体的函数实现,而具体的虚函数实现要依赖于抽象类所谓的依赖倒置是指在编写代码时,一般的编写规则是抽象在最上,然后父类,最下面是子类。
但是设计模式的依赖关系是倒置的,下面的代码需要依赖上面的,这就是依赖倒置原则。

~~~~~~       2.开放封闭原则
~~~~~~~~~~          对拓展开放,对修改封闭;
~~~~~~~~~~          类的模块应该是可拓展的,但是不可修改;

当需求变化时,首先想到的不应该是修改源代码,修改的成本太高,并且大型代码不能轻易修改,
而是在原来代码不变的基础上,增加一些代码,以实现某些需求。
当然可拓展性需要提前在做好规划,比如在抽象类中提前留好拓展接口

~~~~~~       3.单一职责原则
~~~~~~~~~~          相同的责任不要分散到不同的类中;
~~~~~~~~~~          避免一个类承担不同的责任

单一职责的好处是:减少耦合性,提高复用性

~~~~~~       4.替换原则
~~~~~~~~~~          子类能够替换它的父类

为什么要强调子类能够替换父类呢?如果子类能够替换父类,说明父子类之间的强关系,
至少父类的实现在子类中都有

~~~~~~       5.接口隔离原则
~~~~~~~~~~          不要给客户程序提供它们用不到的方法,接口应该尽量小而完备。

客户程序用不到的类中方法,就不要public出去,
如果只是自己类中使用,就private;如果只是子类中使用,就protected;
真正有必要的情况下,即客户程序真的需要这个方法,才去public

~~~~~~       6.优先使用对象组合而不是类继承

继承某种程度上会破坏封装性,父类子类间的耦合性高,而对象组合不会出现这种问题。

~~~~~~       7.封装变化点

封装的最高境界是封装变化点,一端变化,一端不变化

~~~~~~       8.针对接口编程,不针对实现编程

设计模式1——设计模式的原则相关推荐

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

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

  2. 北风设计模式课程---单一职责原则

    北风设计模式课程---单一职责原则 一.总结 一句话总结: 视频教程网上一定能找到做好笔记的博客,很大几率都不需要自己做笔记.比如北风设计模式课程,https://www.cnblogs.com/xi ...

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

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

  4. 代码质量评判标准、设计模式、面向对象设计原则速查表

    文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...

  5. 北风设计模式课程---里氏替换原则(Liskov Substitution Principle)

    北风设计模式课程---里氏替换原则(Liskov Substitution Principle) 一.总结 一句话总结: 当衍生类能够完全替代它们的基类时:(Liskov Substitution P ...

  6. [摘抄]软件设计模式的几个原则

    原文地址:软件设计模式的几个原则 模式是一种对现实世界的概念抽象,建筑模式,设计模式,营销模式,商业运作模式各行各业都有自己的模式. 这里说的设计模式是软件设计里的模式,主要是指面向对象的软件设计.遵 ...

  7. 【设计模式】设计模式的七大原则

    设计模式原则 设计模式原则,其实就是程序员在编程时,应当遵守的原则, 也是各种设计模式的基础(即:设计模式为什么这样设计的依据) 设计模式常用的七大原则有: 单一职责原则 接口隔离原则 依赖倒转(倒置 ...

  8. 设计模式常用的七大原则总结

    设计模式常用的七大原则: 单一职责原则 在方法上(方法很少,逻辑足够简单)或类上遵守单一职责原则都可以. 可以降低类的复杂性 接口隔离原则 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应该 ...

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

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

  10. 北风设计模式课程---里氏代换原则

    北风设计模式课程---里氏代换原则 一.总结 一句话总结: 视频教程网上一定能找到做好笔记的博客,很大几率都不需要自己做笔记.比如北风设计模式课程,https://www.cnblogs.com/xi ...

最新文章

  1. [转]Effective C# 原则5:始终提供ToString()
  2. centos7启动dhcp失败_CentOs 7 搭建DHCP服务器 启动报错
  3. PAT甲级1059 Prime Factors :[C++题解]分解质因子
  4. UINavigationController使用的一些技巧
  5. 织梦(dedecms)当前位置{dede:field name='position' /}修改
  6. boost::gil::threshold_truncate用法的测试程序
  7. Spark 资源调度及任务调度
  8. Oracle修改字段类型方法
  9. 手机计算机的隐藏小技巧,涨知识!MIUI计算器原来有这么多隐藏小技巧,最后一个绝对想不到...
  10. [react-router] 请你说说react的路由是什么?
  11. Windows Phone 7 自适应键盘输入
  12. CrystalMaker 10.6.2 mac版 CrystalMaker X最新版
  13. 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
  14. 2021-2025年中国电气石手镯行业市场供需与战略研究报告
  15. datatable的查询介绍
  16. 2021-06-23元素的排列,浮动和display
  17. go mysql driver事务,Go 数据库事务的源码分析
  18. CorelDRAWX4的VBA插件开发(三十二)调用C++实现一键智能群组(第1节)成品演示以及逻辑和声明浅析
  19. 软件开发标准(文档模板)
  20. java生成zipf分布_数据存储中Zipf分布

热门文章

  1. LeetCode 1721. 交换链表中的节点(快慢指针)
  2. LeetCode 250. 统计同值子树(递归)
  3. LeetCode 1243. 数组变换
  4. LeetCode 743. 网络延迟时间(最短路径)
  5. LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
  6. LeetCode 416. 分割等和子集(动态规划)
  7. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)
  8. LeetCode 20. 有效的括号(栈)
  9. LeetCode 1. 两数之和(哈希)
  10. list.php tid= field,dedecms列表页模板中调用当前栏目文章数