研磨设计模式读书笔记

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

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

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

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

常见的设计原则

1、单一职责原则

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

2、开闭原则

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

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

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

3、里氏替换原则

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

4、依赖倒置原则

要依赖抽象:

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

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

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

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

5、接口隔离原则

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

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

6、最少知识原则

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

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

UML基础

1、UML是什么?

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

2、类图

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WiJ6iPpz-1628822219813)(D:\Files\笔记\md笔记\imgs\image-20210810154807557.png)]

3、关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gDu04DyU-1628822219822)(D:\Files\笔记\md笔记\imgs\image-20210810154920200.png)]

这里只介绍几种关系:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUSX3jst-1628822219826)(D:\Files\笔记\md笔记\imgs\image-20210810171236658.png)]

解释:

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

数字的含义

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

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

2、递归关联

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y0nr3Zqy-1628822219829)(D:\Files\笔记\md笔记\imgs\image-20210810171703473.png)]
表示形式与普通关联差别不大,只是关联对象从两个变成了自身关联自身。

3、聚合关联

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

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

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

1、普通聚合

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

在这里插入图片描述

在这里插入图片描述

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

2、共享聚合

简单来说就是:组成者与被组成者形成多对多关系。
譬如说:学生可以组成学习兴趣小组,学习兴趣小组由学生构成,但是一个学生可以加入多个学习兴趣小组,一个学习兴趣小组中可以有多个学生,双方构成多对多的关系,而且是部分和整体的关系。这是就被称为共享聚合。
在这里插入图片描述
当然,表示形势中,可以加上箭头。

3、复合聚合

如果构成整体的部分,完全隶属与整体,那么这样的聚合称为复合聚合。也叫组成。
比如在写类的时候,属性和方法构成了一个类。每个属性、方法都是组成类的一部分。
再比如完成一个图形界面的时候,图形界面的按钮、文本框、label等组件与图形界面也构成组成关系,各个组件都是图形界面的组成部分。
在这里插入图片描述
在整体的这一端,使用是一个实心的菱形表示。
如果整体对象不存在,那么部分对象其实也就没有了存在的意义/前提。如果一个类消失了,类中的属性、方法也不会存在了。如果图形界面消失了,各个部分在这个界面中存在的意义也就没有了。
所以整体与部分之间具有非常强烈的包含关系。

2、泛化关系

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

3、实现关系

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

4、依赖关系

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

顺序图

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

顺序图中消息的表示方式:
在这里插入图片描述

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

设计模式

1、 设计模式是什么?

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

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

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

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

2、设计模式

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

1、简单工厂

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

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

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

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

简单工厂的特点:

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

简单工厂的优点:

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

简单工厂的缺点:

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

简单工厂的本质:

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

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

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

何时使用简单工厂

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

外观模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介 · · · · · · 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。 《研磨设计模式》在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 作者简介 · · · · · · 陈臣:十年Java/JavaEE开发经验,高级系统架构师,功力深厚,技术精湛,精通Java/JavaEE相关技术和多种开源框架,尤其擅长系统分析和架构设计。从事过专业的中间件研发,包括基于组件的Web页面框架、基于WFMC的工作流中间件、类似于Hibernate的ORM框架等等;参与或主持了多个中大型的企业级应用项目,拥有多年项目经理、技术部经理的管理经验。个人博客:http://www.javass.cn/javapeixunxxyd/index.html 王斌:从事Java/JavaEE开发五年,系统架构师,精通Ejb、Struts、Spring、Hibernate、iBatis等框架技术,擅长设计模式和Eclipse插件开发。作为架构小组骨干,参与了国旅电子商务平台、南王酒庄等多个项目的开发,开发并维护有constance4j、myxstream、SimpleMapping等多个公司内部开源框架,深得多个项目组好评。
本电子书一共两个压缩文档,本文件为part2. 《研磨设计模式》完整覆盖GoF讲述的23个设计模式并加以细细研磨。初级内容从基本讲起,包括每个模式的定义、功能、思路、结构、基本实现、运行调用顺序、基本应用示例等,让读者能系统、完整、准确地掌握每个模式,培养正确的“设计观”;中高级内容则深入探讨如何理解这些模式,包括模式中蕴涵什么样的设计思想,模式的本质是什么,模式如何结合实际应用,模式的优缺点以及与其他模式的关系等,以期让读者尽量去理解和掌握每个设计模式的精髓所在。    《研磨设计模式》在内容上深入、技术上实用、和实际开发结合程度很高,书中大部分的示例程序都是从实际项目中简化而来,因此很多例子都可以直接拿到实际项目中使用。如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础    第2章 简单工厂    第3章 外观模式    第4章 适配器模式(Adapter)    第5章 单例模式(Singleton)    第6章 工厂方法模式(Factory Method)    第7章 抽象工厂模式(Abstract Factory)    第8章 生成器模式(Builder)    第9章 原型模式(Prototype)    第10章 中介者模式(Mediator)    第11章 代理模式(Proxy)    第12章 观察者模式(Observer)    第13章 命令模式(Command)    第14章 迭代器模式(Iterator)    第15章 组合模式(Composite)    第16章 模板方法模式(Template Method)    第17章 策略模式(Strategy)    第18章 状态模式(State)    第19章 备忘录模式(Memento)    第20章 享元模式(Flyweight)    第21章 解释器模式(Interpreter)    第22章 装饰模式(Decorator)    第23章 职责链模式(Chain of Responsibility)    第24章 桥接模式(Bridge)    第25章 访问者模式(Visitor)    附录A常见面向对象设计原则    附录BUML简介    参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值