写在前边:准备写一篇长文结束,不分开写了,找的时候麻烦。各位想看对应的设计模式,直接点击目录查看即可。

如果有哪里写的不好,或者表达不准确,或者描述错误,理解错误:欢迎各位私信、留言给出意见。

由于权限问题,原著无法放在这里,各位想看原著需要在网上找资源了。

本人写这个篇文章的时候,工作经验半年左右,其中可能有许多不到位的地方,如果各位看到哪里不合适,希望可以多多指教,希望不会因为我的错误理解误人子弟。

文章目录

  • 常见的设计原则
    • 1、单一职责原则
    • 2、开闭原则
    • 3、里氏替换原则
    • 4、依赖倒置原则
    • 5、接口隔离原则
    • 6、最少知识原则
  • UML基础
    • 1、UML是什么?
    • 2、类图
      • 3、关系
        • 1、关联
          • 1、普通关联
          • 2、递归关联
          • 3、聚合关联
            • 1、普通聚合
            • 2、共享聚合
            • 3、复合聚合
        • 2、泛化关系
        • 3、实现关系
        • 4、依赖关系
    • 顺序图
  • 设计模式
    • 1、 设计模式是什么?
    • 2、设计模式
      • 1、简单工厂
      • 外观模式

常见的设计原则

1、单一职责原则

一个类、方法应该仅有一个原因可以让它变化

2、开闭原则

一个类应该对扩展开放,对修改关闭。

开闭原则的要求是:类的行为是可扩展的,而且是在不修改已有代码的情况下进行扩展

实现开闭原则的关键就在于合理的抽象、分离出变化与不变化的部分,为变化部分预留下可扩展的方式。比如:钩子方法或动态组合对象

3、里氏替换原则

子类必须可以能替换掉父类

4、依赖倒置原则

要依赖抽象:

  • 高层模块不应该依赖底层模块,二两都应该依赖抽象

  • 抽象不应依赖具体的实现,具体应该以来抽象

层次化调用的时候,一般高层模块包含对业务功能的处理和业务策略的选择,应该被重用,是高层模块去影响底层的具体实现。就像国家出台一项政策,底层的人会去适应这个政策一样。

底层接口应该是高层提出的,然后由底层实现。也就是说底层接口的所有权(构建权)在于高层模块,因此是一种所有权的倒置。

5、接口隔离原则

接口隔离原则,指的是:一个接口包含的方法不应该过多,应该只包含和该接口相关的方法。不应该有其他的无关的“垃圾方法”。这些方法对客户来说,就是一种接口污染。

包含很多“垃圾方法”的接口应该被分离,方便客户的使用。

6、最少知识原则

在设计系统的时候,应该尽量减少对象之间的交互,对象之和自己的朋友进行交流。从而松散类之间的耦合。

让我想起了起义,起义的时候,就是很多人之间的交互,一个人出问题,可能这一堆人都要出问题,一呼百应。

UML基础

1、UML是什么?

UML是一种标准的图形化建模语言,是面向对象分析和设计的一种标准化表示

2、类图

类图是静态视图的图形化表达

类图顾名思义就是一个类的图形化表示。类中有的东西,都可以在类图中表示出来。

3、关系

这里只介绍几种关系:

  1. 关联
  2. 泛化
  3. 实现
  4. 依赖

1、关联

1、普通关联

解释:

× 的一端表示关联的发起方,带 的一端表示被关联的一方。

数字的含义

形式 含义
1个对象
n n个对象
m…n m到n个对象
* 多个对象

上图的含义为:
一个人可以拥有0-多台计算机,而一台计算机只能属于一个人,计算机与人之间构成关联关系。

2、递归关联

如果一个类和本身有关联,那这种关系就叫做递归关联。


表示形式与普通关联差别不大,只是关联对象从两个变成了自身关联自身。

3、聚合关联

聚合是一种特殊的关联。如果类与类之间是 整体与部分 的关系,使用聚合来表示

比如:公司 与 员工,班级 与 学生。

聚合又可以分为:普通聚合、共享聚合、复合聚合

1、普通聚合

表示 ”整体与部分“ 。两种表示

菱形在表示关联关系的那一端。两种表示方法都可以。

2、共享聚合

简单来说就是:组成者与被组成者形成多对多关系。
譬如说:学生可以组成学习兴趣小组,学习兴趣小组由学生构成,但是一个学生可以加入多个学习兴趣小组,一个学习兴趣小组中可以有多个学生,双方构成多对多的关系,而且是部分和整体的关系。这是就被称为共享聚合。

当然,表示形势中,可以加上箭头。

3、复合聚合

如果构成整体的部分,完全隶属与整体,那么这样的聚合称为复合聚合。也叫组成。
比如在写类的时候,属性和方法构成了一个类。每个属性、方法都是组成类的一部分。
再比如完成一个图形界面的时候,图形界面的按钮、文本框、label等组件与图形界面也构成组成关系,各个组件都是图形界面的组成部分。

在整体的这一端,使用是一个实心的菱形表示。
如果整体对象不存在,那么部分对象其实也就没有了存在的意义/前提。如果一个类消失了,类中的属性、方法也不会存在了。如果图形界面消失了,各个部分在这个界面中存在的意义也就没有了。
所以整体与部分之间具有非常强烈的包含关系。

2、泛化关系

泛化关系又称作通用化或继承,大多是用来描述继承关系的。

3、实现关系

听名字应该就要可以明白,实现关系描述的是接口和实现类的关系。

4、依赖关系

依赖关系的描述是:如果某个对象的行为和实现,需要受到另外对象的影响,那么就说这个对象依赖与其他对象。
严格来说,基本有关联的地方,都有依赖。
通常来说:两个对象之间建立了关系,直接使用或是当作参数传入,或是作为属性出现,都是可以称为依赖关系。

顺序图

这里只简单说明一下,因为原著中的附录中有提到。

顺序图中消息的表示方式:

这些是前置知识,接下来就是正餐了

设计模式

1、 设计模式是什么?

设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。

注意描述中的用词:是用于解决在特定环境下特定问题解决方案

设计模式是解决某些特定问题的方案,这也就是说,设计模式不是万能的,只能解决某些特定问题,因为这些问题在工程设计中经常出现,所以出现了解决这些问题的一套解决方案------设计模式。

跟我们在做数学题时常用的一些解题套路有些相似。

2、设计模式

这部分将直接对原书的模式讲解进行,如果各位想要看该模式的具体场景、详解、模式的案例请阅读原书。
说人话就是:这里将直接对模式进行总结,不会仔细的讲解模式。如果有哪里总结不到位的,各位可以留言指正,将不胜感激。

1、简单工厂

工厂,具有这样的功能:对原料进行加工处理,制造出规范化的一些产物。
比如:手机组装工厂。原料是单独的一些手机部件,产出的就是规范化的手机。手机组装工厂不会去区分是什么牌子的手机,只是负责组装手机。

产出的手机,就相当于JAVA中的接口。是一个定义,规范。具体的细节,实现都是由工厂去组装完成的。工厂就是用来制造东西。

简单工厂:提供一个创建对象实例的功能,而使用者无须关心实例具体的实现。被创建的实例类型可以是接口、抽象类,也可以是具体的类。

简单工厂,我理解的更像是一个可以创建实例对象的工具类。

简单工厂的特点:

  • 调用者不直接通过 new 的方式创建实体类,而是通过简单工厂,让工厂创建实体类,返回接口
  • 创建实体类采用的实现类,可以通过参数、配置文件、数据库、运行时获取等方式传递给工厂
  • 简单工厂做的是:调用者直接使用抽象,工厂选择具体实现。

简单工厂的优点:

  • 帮助封装
    简单工厂虽然简单,但是确实实现了组件的封装,让使用者可以面向接口编程。
  • 解耦
    通过简单工厂,实现了客户端和具体实现类的解耦。客户端不需要知道接口具体是谁实现的,也不需要知道接口是如何实现的,只需要直接获取它需要的接口对象即可。

简单工厂的缺点:

  • 可能增加客户端的复杂度
    如果通过客户端的参数选择具体的实现类,那么就必须让客户端理解每个参数所代表的具体功能和含义。这样会增加客户端的使用难度。

简单工厂的本质:

简单工厂的本质是:选择实现

简单工厂的重点:选择。
具体的实现有实现类去完成。简单工厂的职责在于:选择一个合适的实现类去实现,根据客户端的需要去选择合适的实现类。

简单工厂的难点:如何选择
简单工厂在选择实现的时候,需要一个“信号”去决定选择哪一种实现。这个“信号”是实现简单工厂的难点。这个“信号”可以由客户端传参传过来,可以使用配置文件读取,还可以使用内存中的值,数据库中的值…等等的方式,需要选择一种合适的方式去传递这个“信号”。

何时使用简单工厂

  • 想要完全的封装隔离具体实现,让外部只能通过接口操作封装类。
  • 想要把对外创建对象的职责集中管理和控制。

外观模式

研磨设计模式读书笔记相关推荐

  1. 大话设计模式读书笔记

    主题 概要 设计模式 大话设计模式读书笔记 编辑 时间 新建 20170423 序号 参考资料 1 大话设计模式 重新看了一遍设计模式,除了一些已经特别熟悉的模式,都自己敲了一遍代码,有些豁然开朗的感 ...

  2. JavaScript设计模式读书笔记(一)= 创建型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  3. JavaScript设计模式读书笔记(四)= 技巧型设计模式

    全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...

  4. 设计模式读书笔记-----工厂方法模式

    一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...

  5. 设计模式---读书笔记

    一.文章来由 按照惯例,来一个来由,这是<设计模式-可复用面向对象软件的基础>的读书笔记,整理给自己看的,整理的内容也会不断更新.大神轻喷~~如果不喜欢请留言说明原因再踩哦,谢谢,我也可以 ...

  6. GoF设计模式读书笔记

    花了大概一天时间,把大名鼎鼎的GoF的设计模式看完了.内容很丰富,被如今封为准则的23种设计模式在这本书里面娓娓道来. 正如该书前沿所述,这本书事实上并不是一本适合从头读到尾的书,而是一本类似于手册, ...

  7. 大话设计模式读书笔记(十三) 状态模式

    状态模式: 状态模式定义: 状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像改变了其子类. 状态模式UMl类图: 状态模式Java代码实现 public class ...

  8. Head First设计模式读书笔记九 第十章 状态模式

    过去的笔记链接 https://blog.csdn.net/u011109881/article/details/60158137 状态模式实例 用Java设计糖果机吧 大致流程: 上图中,有四种状态 ...

  9. Head First设计模式读书笔记八 第九章上 迭代器模式

    之前的总结: https://blog.csdn.net/u011109881/article/details/59677544 个人觉得本章节,HeadFirst讲的没有之前看到的网站讲的清晰,至少 ...

  10. Head First设计模式读书笔记七 第八章 模板方法模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: https://blog.csdn.net/u011109881/article/details/60594985 简介 模 ...

最新文章

  1. MIT:大脑如何跟踪运动中的物体?
  2. java excel 复杂表头_中国式复杂报表开发教程(4)—类Excel复杂表头报表
  3. python请求post无返回结果_Python请求POST返回不完整的内容
  4. MySQL添加、删除字段
  5. AtCoder AGC038D Unique Path (图论)
  6. python输入10个学生的成绩储存在列表中_获得10名学生的平均成绩python
  7. 超好用的input模糊搜索 jq模糊搜索,
  8. go+cookie+angular踩过的坑
  9. Eclipse打JAR包的使用
  10. FTP 编写 3:同时为多个客户端服务(多线程)
  11. 程序员面试 IT 公司,这些细节一定要注意!
  12. OpenCV-图像处理(17、Sobel算子)
  13. android iphone字体,ios字体适配的三种实现方法
  14. 【HTML5】Web前端——制作 3D 旋转魔方相册
  15. SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案
  16. 将进酒计算机应用技术学院信息门户,《将进酒》信息化教学设计
  17. 【java1234】java学习路线图2018
  18. PMP证书真的有用吗?
  19. 二十六篇,Linux库文件(动态库和静态库)的制作。
  20. IEEE论文免费下载

热门文章

  1. 一看就懂-grep命令详解
  2. 多功能网页刷新助手(刷PV)
  3. HTK中函数ProcessCrossWordLinks处理流程
  4. java实现文字跑马灯_跑马灯的问题
  5. 一个屌丝程序猿的人生(九)
  6. 【15】 数学建模 | 典型相关分析 | 内附具体实现流程(清风课程,有版权问题,私聊删除)
  7. 数学四大思想八大方法_高中数学八种思维方法如何训练数学思维,高中数学的四大思想是什么?...
  8. epson r1900 清零软件_Epson爱普生me1100清零软件 me1100打印机废墨清零软件
  9. SQLPrompt10带注册机(支持SSMS v18.5)
  10. JavaScript全套视频教程