`
yueguangyuan
  • 浏览: 337811 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

Head First Design Patterns 读书笔记(一)

阅读更多

     最近有幸阅读O'Reilly的Head First Design Patterns,发现这本书的确是对Design Patterns的一种全新解读,虽然影印版阅读起来仍然不那么流畅,但是已经让我对Design Patterns有了进一步的认识,虽然接下来会很忙,但仍然计划抓紧时间把这本书学习一遍,以加深自己对Design Patterns的了解。

      本书中没有照搬其他书籍对Design  Patterns分类从工厂方式开始介绍的老套路,而是以一个程序员很常见的工作场景开始了Design Patterns的介绍和讨论(本书中介绍都是基本都是这样的引人深入的方法)。

      截至目前(辛辛苦苦的读了7章英文),学习到的东西在这里做一个粗略的总结(以英文为准):

一、OO Principles:

   1.Encapsulate what varies

   2.Favor composition over inheritance

   3.Program to interfaces,not implementations 看到这个原则让我想起James Gossing就曾经在别人采访中说过:如果再给他一次机会重头开发Java,那么他将去掉所有的抽象类而采用接口实现,不过他可不是对着这个原则来的,整个Patterns中都一直在告诉我们要拥抱变化,最好的方式就是解偶,而接口就是最好的解藕方式。

   4.Strive for loosely coupled designs between objects that interact

   5.Classes should be open for extension but closed for modification

   6.Depend on abstractions.Do not depend on concrete classes

句句金句,需熟记于心,等有空的时候我再补充一些比较常见的场景以便于理解。

二、Design Toolbox

   1.Strategy - defines a family of algorithms,encapthulates each one,and makes them interchangeable.Strategy lets the algorithm vary independently from clients that use it.

   2.Observer - defines a one-to-many dependency between objects so that when one object changes state,all its dependents are notified and updated automatically.

   3.Decorator - Attach additional responsibilities to an object dynamically.Decorators provide a flexible alternative to subclassing for extending functionality.  (最常见的就是java.io包,尽管使用Decorator可能会使程序晦涩难懂,但是它仍然是使用子类来获得方法继承之外的另一个稳妥的编程手段)

   4.Factory method - Define an interface for creation an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to the subclasses.(其中还包含一个Simple Factory,但是它并不是Patterns,而是一个可以帮助你将客户端与指定类解偶的方法)

   5.Abstract Factory - Provide an interface for creating families of related or dependent objects without specifying their concrete classes. (Dependency Injection)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics