前言-基本概念

  • 设计模式并不使用独特的语言特性,也不采用那些神奇的编程技巧。所有的模式均可以用标准的面向对象语言实现,这也许会多费一些功夫,但是增加了软件的灵活性和可复用性。

  • 书中根据模式的性质将模式划分为三类:创建型(creational)、结构型(structural)、行为型(behavioral)。 创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。

  • 多态:对象接口与其功能实现是分离的,不同对象可以对请求做不同的实现,也就是说,两个有相同接口的对象可以有完全不同的实现。

  • 在面向对象系统中,接口是基本的组成部分,对象只有通过它们的接口才能与外部交流,如果不通过对象的接口就无法知道对象的任何事情,也无法请求对象做任何事情。

  • 理解对象的类和类型(抽象、具体、混入)之间的差别非常重要:一个对象的类定义了对象是怎样实现的,同时也定义了对象的内部状态和操作的实现。但是对象的类型只与它的接口有关,接口即对象能响应的请求的集合,一个对象可以有多个类型,不同类也可以有相同的类型。

  • 所有从抽象类导出的类将共享该抽象类的接口,这时,所有的子类都能相应抽象类中的请求。只根据抽象类中定义的接口来操作对象有以下两个好处: 1)客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。 2)客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 这样可以极大地减少系统实现之间的相互依赖,也产生了可复用的面相对象设计的如下原则: 针对接口编程,而不是针对实现编程。

  • 混入类是给其他类提供可选择的接口或功能的类,它与抽象类一样不能实例化,都是用于继承的,抽象类和混入类都是对象的类型。

  • 优先使用对象组合,而不是类继承。 因为当需要复用子类时,实现上的依赖性就会产生一些问题。如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。优先使用对象组合有助于保持每个类被封装,并被集中在单个任务上;基于对象组合的设计有更多的对象(而有较少的类),且系统的行为将依赖于对象间的关系而不是被定义在某个类中。

  • 委托(在一个对象中引用另一个对象,以此来完成请求)是对象组合的特例。它告诉你对象组合作为一个代码复用机制可以替代继承。

  • 设计问题对框架设计而言最具重要性。(相比应用和工具库)一个使用设计模式的框架比不使用设计模式的框架更可能获得高层次的设计复用和代码复用。成熟的框架通常使用了多种设计模式。了解设计模式的人能更快的洞悉框架。

转载于:https://juejin.im/post/5b163f336fb9a01e4f47bb29

浅读设计模式 - 1相关推荐

  1. 浅读《视觉SLAM十四讲:从理论到实践》--操作1--初识SLAM

    浅读<视觉SLAM十四讲:从理论到实践>--操作1--初识SLAM 下载<视觉SLAM十四讲:从理论到实践>源码:https://github.com/gaoxiang12/s ...

  2. Redux源码全篇浅读

    本文是关于 redux(3.7.2)源代码的一些浅读 在redux源码目录中 ,可以看到以下文件目录: |-- utils/|-- warning.js //打印error |-- 1. applyM ...

  3. 机器学习论文源代码浅读:Autoformer

    原本想要和之前一样写作"代码复现",然而由于本人一开始对于Autoformer能力理解有限,参考了一定的论文中的源代码,写着写着就发现自己的代码是"加了注释版本" ...

  4. 浅读《解密社群粉丝经济学》几点观点

    浅读<解密社群粉丝经济学>几点观点 为什么会形成社群?因为在消费者主权时代,随时随地互联的移动互联网时代,每一个既弱小又能自主的个体,在信息过度的时空里,必然自发的基于某种机缘.兴趣和价值 ...

  5. 浅读西瓜书(第四章)

    浅读西瓜书(第四章) 4.1基本流程 ​ 决策树,顾名思义,肯定与做决策有关.实际上决策树既可以做决策也可以做回归.在我们生活中其实也经常用到决策树的模型.比如猜数字的游戏.给出一个数字,猜想者猜测一 ...

  6. 浅读《简约之美-软件设计之道》

    浅读<简约之美-软件设计之道>     大家好,我是Lampard~     这个周末阅读了一本程序设计相关的书籍<简约之美-软件设计之道>,它原著是<The Scien ...

  7. SQL Server锁机制浅读

    SQL SERVER 锁机制浅读 内容为本人根据当前正在读的<SQL Server性能调优实战>(陈畅亮 吴一晴 著 机械工业出版社)和前辈分享的PPT,通读后的总结与汇总. 序 锁及事务 ...

  8. 【大话设计模式】——浅谈设计模式基础

    初学设计模式给我最大的感受是:人类真是伟大啊!单单是设计模式的基础课程就让我感受到了强烈的生活气息. 个人感觉<大话设计模式>这本书写的真好.让貌似非常晦涩难懂的设计模式变的生活化.趣味化 ...

  9. 浅谈设计模式 | 先有鸡还是先有蛋?先有代码后有设计模式还是先有设计模式再写代码?

    前言 一.面向对象的三大特性 1. 封装 2.继承 3.多态 二.面向对象七个设计原则 1.单一职责原则 2.开放封闭原则 3.里氏替换原则 4.接口隔离原则 5.依赖倒置原则 6.合成复用原则 7. ...

最新文章

  1. java快速排序的时间复杂度_java 快速排序
  2. PowerShell脚本遇到的问题汇总
  3. 重磅合集 | 31 篇技术文章,带你从零入门 K8s (留言赠书)
  4. chrome浏览器设置网页快速到顶部和到底部的方法
  5. C++学习之路 | PTA乙级—— 1035 插入与归并 (25 分)(精简)
  6. python判断回文数_Python实现判断一个整数是否为回文数算法示例
  7. linux ftp 没反应,【已回应】FTP无法使用怎么办
  8. java 多线程基础(一)
  9. junit5 入门系列教程-14-junit5 重复测试(@RepeatedTest)
  10. intel hd3000 本 在 64位 ubuntu10.04 下 液晶亮度无法调节 的解决之道(亲测)
  11. cbv本质,前后端交互编码方式,django模板使用的2种方式,模板语法
  12. 华为机试题 好友关系管理
  13. Python绘制太阳花
  14. ctf.show misc入门 21~40
  15. fastadmin 邮件配置
  16. JAVA 字符串转数组并且进行遍历
  17. PSSP Based on Data Partition and Semi-Random Subspace Method 论文笔记
  18. 知识经济时代的基石:知识协同
  19. xml中使用 报错:XML Parser Error on line 35: 在实体引用中, 实体名称必须紧跟在 ‘‘ 后面。
  20. 微信小程序 map 自定义地图数据,实现方式+思路+代码(最简易的实现方式)

热门文章

  1. 深度学习教程 TensorFlow and Deep Learning Tutorials
  2. JDK7与JDK8中HashMap的实现
  3. Visual Studio Code中文文档(一)-快速入门
  4. Git使用教程与基本原理和Sourcetree基本使用探微
  5. mysql dba系统学习(18)mysql主从复制的实现 mysql dba系统学习(19)配置mysql+lvs+keeplived实现Mysql读操作的负载均衡
  6. 驾照考试:理论考试注意事项
  7. 数字图像处理:第六章 几何运算
  8. Flask出现Error code 400, message Bad request syntax异常
  9. CCF NOI1010 邮寄包裹
  10. php 函数中静态变量的问题