图解设计模式
很早前就看过《设计模式:可复用面向对象软件的基础》,那时候刚入行不久,对于面向对象开发还不熟悉,对Smalltalk这样的语言更是陌生,所以看起来晦涩难懂,翻了大概三分之一就束之高阁了。过了几年以后,又再看了一个简单版的《Head first设计模式》。现在又过去了几年,像设计模式这种属于计算机基础,值得一看再看熟记于心,所以就又买了一本重读了一遍。
这本是看过的图解系列的第3本书了,很早前看的第一本《图解HTTP协议》觉得不错,就又买了该系列的其他书。然而因为作者不是同一个人,所以质量也不是全然相同,但这个系列的书都是图文并茂比较容易理解的。这本书的作者和《程序员的数学》是同一个人,但是比起那本书,这本书要更好一些。《程序员的数学》写的实在过于浅显了。这本书总得来说很不错,不像原书那样艰涩,又不像Head First那样啰嗦,语言比较简练,例子举得也不错,推荐一读。
这本书将23个模式分为了10个部分,进行了分别讲述。比原书的“创建型模式”、“结构型模式”、“行为模式”划分的更细致一些。每个模式都是先引出一个问题,然后借助模式解决这个问题,再给出模式的标准UML图。因为是由实际问题入手,所以理解上更轻松一些。
看书只是有个大概的印象,还是要自己实现一遍代码才会理解的更深刻,如果在项目中进行应用,就会理解得更加透彻了。这里简单把各个模式的类图罗列下来,有时间了就回头翻一下,所以下面的图只对读过书的人才有意义(其实很大程度上是方便我自己查阅 ...)。
第1部分 适应设计模式
Iterator
迭代器,将遍历对象的逻辑抽离了出来。
Adapter
接口不匹配时创建Adapter,然后进行一个功能的“转发”。
第2部分 交给子类
Template Method
最基础的一个模式,简单的都不像一个模式了。基类实现算法,调用自身的抽象方法,子类实现具体的方法。
Factory Method
将“框架”和“具体加工”分离了出来。
第3部分 生成实例
Singleton
全局只有一个实例,也是很常用的模式,重点是私有构造函数,和静态实例。
Prototype
通过对现有类的复制来生成实例,而不是通过new。因为重新new一个对象可能会很慢,或者是根据类生成实例过于复杂时。需要注意实现复制是深度复制还是浅度复制。
Builder
用来组装复杂的对象。
Abstract Factory
将关联的组件组成最终产品。需要注意的是在创建工厂实例时,使用了反射。
第4部分 分开考虑
Bridge
类的功能层次结构:父类-->子类-->孙类;类的实现层次结构:父类(抽象方法)-->子类实现1、父类-->子类实现2。
Strategy
这也是一种常见的模式:整体替换算法。
第5部分 一致性
Composite
适合用来遍历树形结构。
Decorator
装饰物与被装饰物具有一致性。用来不改变现有类,为现有类增加功能。
第6部分 访问数据
Visitor
将数据结构与处理分离出来。
Chain of Resposibility
将处理的类形成一个链条。
第7部分 简单化
Facade
隐藏复杂性,对外部只通过facade类暴露少量接口。
Mediator
经常用在UI层,有点类似js中的react/redux模式,相互关联的组件,由一个统一的类进行协调更新。
第8部分 管理状态
Observer
发布/订阅模式,当状态变化时,通知到订阅者。
Memonto
保存对象状态
State
State,用类来代表状态,避免过多的if-else状态判断语句。
第9部分 避免浪费
Flyweight
避免创建过多实例,客户端共享已经创建好的实例。
Proxy
只在必要时才创建实例,该实例通常是一个重型对象(创建比较耗时的对象,例如发起远程连接之类)。
第10部分 用类来表现
Command
将命令表示成类。
Interpreter
通常用来进行语法分析,例如分析正则表达式,将markdown转义成html等。
感谢阅读,希望这篇文章能给你带来帮助!