研磨设计模式读书笔记
写在前边:准备写一篇长文结束,不分开写了,找的时候麻烦。各位想看对应的设计模式,直接点击目录查看即可。
如果有哪里写的不好,或者表达不准确,或者描述错误,理解错误:欢迎各位私信、留言给出意见。
由于权限问题,原著无法放在这里,各位想看原著需要在网上找资源了。
本人写这个篇文章的时候,工作经验半年左右,其中可能有许多不到位的地方,如果各位看到哪里不合适,希望可以多多指教,希望不会因为我的错误理解误人子弟。
文章目录
- 常见的设计原则
- 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、关联
1、普通关联
解释:
带 ×
的一端表示关联的发起方,带→
的一端表示被关联的一方。
数字的含义
形式 | 含义 |
---|---|
空 | 1个对象 |
n | n个对象 |
m…n | m到n个对象 |
* | 多个对象 |
上图的含义为:
一个人可以拥有0-多台计算机,而一台计算机只能属于一个人,计算机与人之间构成关联关系。
2、递归关联
如果一个类和本身有关联,那这种关系就叫做递归关联。
表示形式与普通关联差别不大,只是关联对象从两个变成了自身关联自身。
3、聚合关联
聚合是一种特殊的关联。如果类与类之间是 整体与部分
的关系,使用聚合来表示
比如:公司 与 员工,班级 与 学生。
聚合又可以分为:普通聚合、共享聚合、复合聚合
1、普通聚合
表示 ”整体与部分“ 。两种表示
菱形在表示关联关系的那一端。两种表示方法都可以。
2、共享聚合
简单来说就是:组成者与被组成者形成多对多关系。
譬如说:学生可以组成学习兴趣小组,学习兴趣小组由学生构成,但是一个学生可以加入多个学习兴趣小组,一个学习兴趣小组中可以有多个学生,双方构成多对多的关系,而且是部分和整体的关系。这是就被称为共享聚合。
当然,表示形势中,可以加上箭头。
3、复合聚合
如果构成整体的部分,完全隶属与整体,那么这样的聚合称为复合聚合。也叫组成。
比如在写类的时候,属性和方法构成了一个类。每个属性、方法都是组成类的一部分。
再比如完成一个图形界面的时候,图形界面的按钮、文本框、label等组件与图形界面也构成组成关系,各个组件都是图形界面的组成部分。
在整体的这一端,使用是一个实心的菱形表示。
如果整体对象不存在,那么部分对象其实也就没有了存在的意义/前提。如果一个类消失了,类中的属性、方法也不会存在了。如果图形界面消失了,各个部分在这个界面中存在的意义也就没有了。
所以整体与部分之间具有非常强烈的包含关系。
2、泛化关系
泛化关系又称作通用化或继承,大多是用来描述继承关系的。
3、实现关系
听名字应该就要可以明白,实现关系描述的是接口和实现类的关系。
4、依赖关系
依赖关系的描述是:如果某个对象的行为和实现,需要受到另外对象的影响,那么就说这个对象依赖与其他对象。
严格来说,基本有关联的地方,都有依赖。
通常来说:两个对象之间建立了关系,直接使用或是当作参数传入,或是作为属性出现,都是可以称为依赖关系。
顺序图
这里只简单说明一下,因为原著中的附录中有提到。
顺序图中消息的表示方式:
这些是前置知识,接下来就是正餐了
设计模式
1、 设计模式是什么?
设计模式:是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案。
注意描述中的用词:是用于解决在特定环境下
、特定问题
的 解决方案
设计模式是解决某些特定问题的方案,这也就是说,设计模式不是万能的,只能解决某些特定问题,因为这些问题在工程设计中经常出现,所以出现了解决这些问题的一套解决方案------设计模式。
跟我们在做数学题时常用的一些解题套路有些相似。
2、设计模式
这部分将直接对原书的模式讲解进行,如果各位想要看该模式的具体场景、详解、模式的案例请阅读原书。
说人话就是:这里将直接对模式进行总结,不会仔细的讲解模式。如果有哪里总结不到位的,各位可以留言指正,将不胜感激。
1、简单工厂
工厂,具有这样的功能:对原料进行加工处理,制造出规范化的一些产物。
比如:手机组装工厂。原料是单独的一些手机部件,产出的就是规范化的手机。手机组装工厂不会去区分是什么牌子的手机,只是负责组装手机。
产出的手机,就相当于JAVA
中的接口。是一个定义,规范。具体的细节,实现都是由工厂去组装完成的。工厂就是用来制造东西。
简单工厂:提供一个创建对象实例的功能,而使用者无须关心实例具体的实现。被创建的实例类型可以是接口、抽象类,也可以是具体的类。
简单工厂,我理解的更像是一个可以创建实例对象的工具类。
简单工厂的特点:
- 调用者不直接通过
new
的方式创建实体类,而是通过简单工厂,让工厂创建实体类,返回接口 - 创建实体类采用的实现类,可以通过参数、配置文件、数据库、运行时获取等方式传递给工厂
- 简单工厂做的是:调用者直接使用抽象,工厂选择具体实现。
简单工厂的优点:
- 帮助封装
简单工厂虽然简单,但是确实实现了组件的封装,让使用者可以面向接口编程。 - 解耦
通过简单工厂,实现了客户端和具体实现类的解耦。客户端不需要知道接口具体是谁实现的,也不需要知道接口是如何实现的,只需要直接获取它需要的接口对象即可。
简单工厂的缺点:
- 可能增加客户端的复杂度
如果通过客户端的参数选择具体的实现类,那么就必须让客户端理解每个参数所代表的具体功能和含义。这样会增加客户端的使用难度。
简单工厂的本质:
简单工厂的本质是:选择实现
简单工厂的重点:选择。
具体的实现有实现类去完成。简单工厂的职责在于:选择一个合适的实现类去实现,根据客户端的需要去选择合适的实现类。
简单工厂的难点:如何选择
简单工厂在选择实现的时候,需要一个“信号”去决定选择哪一种实现。这个“信号”是实现简单工厂的难点。这个“信号”可以由客户端传参传过来,可以使用配置文件读取,还可以使用内存中的值,数据库中的值…等等的方式,需要选择一种合适的方式去传递这个“信号”。
何时使用简单工厂
- 想要完全的封装隔离具体实现,让外部只能通过接口操作封装类。
- 想要把对外创建对象的职责集中管理和控制。
外观模式
研磨设计模式读书笔记相关推荐
- 大话设计模式读书笔记
主题 概要 设计模式 大话设计模式读书笔记 编辑 时间 新建 20170423 序号 参考资料 1 大话设计模式 重新看了一遍设计模式,除了一些已经特别熟悉的模式,都自己敲了一遍代码,有些豁然开朗的感 ...
- JavaScript设计模式读书笔记(一)= 创建型设计模式
全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...
- JavaScript设计模式读书笔记(四)= 技巧型设计模式
全系列目录 JavaScript设计模式读书笔记(一)=> 创建型设计模式 JavaScript设计模式读书笔记(二)=> 结构型设计模式 JavaScript设计模式读书笔记(三)=&g ...
- 设计模式读书笔记-----工厂方法模式
一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...
- 设计模式---读书笔记
一.文章来由 按照惯例,来一个来由,这是<设计模式-可复用面向对象软件的基础>的读书笔记,整理给自己看的,整理的内容也会不断更新.大神轻喷~~如果不喜欢请留言说明原因再踩哦,谢谢,我也可以 ...
- GoF设计模式读书笔记
花了大概一天时间,把大名鼎鼎的GoF的设计模式看完了.内容很丰富,被如今封为准则的23种设计模式在这本书里面娓娓道来. 正如该书前沿所述,这本书事实上并不是一本适合从头读到尾的书,而是一本类似于手册, ...
- 大话设计模式读书笔记(十三) 状态模式
状态模式: 状态模式定义: 状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像改变了其子类. 状态模式UMl类图: 状态模式Java代码实现 public class ...
- Head First设计模式读书笔记九 第十章 状态模式
过去的笔记链接 https://blog.csdn.net/u011109881/article/details/60158137 状态模式实例 用Java设计糖果机吧 大致流程: 上图中,有四种状态 ...
- Head First设计模式读书笔记八 第九章上 迭代器模式
之前的总结: https://blog.csdn.net/u011109881/article/details/59677544 个人觉得本章节,HeadFirst讲的没有之前看到的网站讲的清晰,至少 ...
- Head First设计模式读书笔记七 第八章 模板方法模式
本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: https://blog.csdn.net/u011109881/article/details/60594985 简介 模 ...
最新文章
- MIT:大脑如何跟踪运动中的物体?
- java excel 复杂表头_中国式复杂报表开发教程(4)—类Excel复杂表头报表
- python请求post无返回结果_Python请求POST返回不完整的内容
- MySQL添加、删除字段
- AtCoder AGC038D Unique Path (图论)
- python输入10个学生的成绩储存在列表中_获得10名学生的平均成绩python
- 超好用的input模糊搜索 jq模糊搜索,
- go+cookie+angular踩过的坑
- Eclipse打JAR包的使用
- FTP 编写 3:同时为多个客户端服务(多线程)
- 程序员面试 IT 公司,这些细节一定要注意!
- OpenCV-图像处理(17、Sobel算子)
- android iphone字体,ios字体适配的三种实现方法
- 【HTML5】Web前端——制作 3D 旋转魔方相册
- SkeyePlayer RTSP播放器源码解析系列之H264一帧多NAL写MP4录像花屏问题解决方案
- 将进酒计算机应用技术学院信息门户,《将进酒》信息化教学设计
- 【java1234】java学习路线图2018
- PMP证书真的有用吗?
- 二十六篇,Linux库文件(动态库和静态库)的制作。
- IEEE论文免费下载
热门文章
- 一看就懂-grep命令详解
- 多功能网页刷新助手(刷PV)
- HTK中函数ProcessCrossWordLinks处理流程
- java实现文字跑马灯_跑马灯的问题
- 一个屌丝程序猿的人生(九)
- 【15】 数学建模 | 典型相关分析 | 内附具体实现流程(清风课程,有版权问题,私聊删除)
- 数学四大思想八大方法_高中数学八种思维方法如何训练数学思维,高中数学的四大思想是什么?...
- epson r1900 清零软件_Epson爱普生me1100清零软件 me1100打印机废墨清零软件
- SQLPrompt10带注册机(支持SSMS v18.5)
- JavaScript全套视频教程