《head first设计模式》——设计模式入门的最优选择

《head first设计模式》——设计模式入门的最优选择

今天读完了《head first设计模式》,在这里推荐给大家。

本书解决什么问题

当我们在学校做自己的小项目时,可能不到100行的代码就可以解决大多数的需求。但是当公司遇到了较大型的项目时,代码量将会增长到一个较大的量级。如果不能以科学有效的方式管理代码,很快代码就会变得冗余不堪。这个时候如果需要新加一个需求,就会发现代码修改起来非常困难:可能为了新加一个功能就要改写好几处的代码,稍不留神就会引入新的bug。于是就会经常性的进入半小时写代码,三小时debug的节奏,这会极大地限制自己的工作效率。这时候如何将代码写的比较优雅易维护就是我们必须要做的一件事了。

将代码写的容易维护,一方面是要遵从一定的代码规范,让代码变得可读;另一方面是要利用面向对象语言的一些特性,使用一些模块化的方式将代码更好的组织起来。而这种科学的代码组织方式,就是设计模式。

事实上,已经有四位非常厉害的同志早在1995年就总结出了非常好用的一套设计模式,大名鼎鼎的《设计模式》就是出自他们四人之手。他们四个人,更为大家熟悉的名字是四人组,或者GoF(Gang of Four)。

《head first设计模式》——设计模式入门的最优选择

经典四人组所著《设计模式》(豆瓣截图)

但是这本书有点略微晦涩,对于非计算机专业的(比如我)不是特别友好,于是选择了另外一本更为友好的书,也是我们今天的主角:《Head First设计模式》。Head First实际上是一个系列,特点是采用大量的和内容贴切的插图、对话来进行辅助讲解,形象而不失生动的讲解内容。而《Head First设计模式》可谓完美的继承了这个特点,将枯燥的设计模式讲解的十分生动,令人欲罢不能。

《head first设计模式》——设计模式入门的最优选择

本书所涉及的设计模式,有基本的原理,同时也有简单但不失深刻的代码实现。虽然它的代码都是由java完成的,但用到的java语言本身的特性并不多,对于只懂python的我来说也基本上能读懂八九成。如果大家有志于从事代码相关岗位,十分推荐大家读一下本书。

读完这本书你将收获什么:

知道一些常用的设计模式,换句话说是代码的模块化技巧。这会让你的代码能够保持简单且具有弹性。我老板有句名言:如果你想让你的代码使用多次,可拓展,可维护,那就先把你的代码模块化设计好。否则,大概率你的代码日后可能只会使用一次。

这本书不会提高你的代码基础。如果你还没有搞懂面向对象中的继承和多态,那就先搞明白他们再来阅读这本书。

本书的主要内容

简要的列举一下本书涉及到的主要的内容。更细节的东西还是需要大家一度原书才能体会的到。

一些常见的OO (Object Oriented,面向对象)原则

  • 封装变化
  • 多用组合,少用继承
  • 针对接口编程,不针对实现编程
  • 为交互对象之间的松耦合设计而努力
  • 类应该对扩展开放,对修改关闭
  • 依赖抽象,不要依赖具体类
  • 只和朋友交谈
  • 类应该只做一件事情

本书涉及到的几个设计模式:

  • 策略模式:定义了算法族,分别封装起来,让他们之间可以互相替换。此模式让算法的变化独立于使用算法的客户。
  • 观察者模式:在对象之间定义一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象就会收到通知,并自动更新。
  • 装饰者模式:动态地将责任附加到对象上。装饰者模式是有别于继承的另一种拓展功能的选择。
  • 工厂方法:定义了一个创建对象的接口,有子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
  • 抽象工厂模式:提供一个接口,用于创建相关或以来对象的家族,而不需要明确的指定具体类。
  • 单件模式:确保一个类有且仅有一个实例,并提供全局访问点。
  • 命令模式:封装请求为一个对象,这可以让你使用不同的请求,队列或者日志请求来参数化其他对象。
  • 适配器模式:将一个类的接口,转换为客户希望的另一个接口。
  • 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
  • 迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
  • 组合模式:允许你将对象组成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象和对象的组合。
  • 状态模式:允许对象在内部状态状态改变它的行为,对象看起来好像修改修改了它的类。
  • 代理模式:为来一个对象进行一种包装,以控制对此对象的访问
  • 复合模式:本质上是其他模式的综合,形成一种解决方案,用以解决一种一般性问题。本书中举了MVC框架作为这一模式的例子。


分享到:


相關文章: