Thursday, March 21, 2013

Design Pattern 4: 走马观花 GoF 23个patterns

 
 

Sent to you by Zhiyuan via Google Reader:

 
 

via Peking2-Leetcode面试算法 by peking2 on 3/17/13

先总结一下
  • 设计模式的三个准则:中意与组合而不是继承, 依赖于接口而不是实现,高内聚低耦合
  • 设计模式分为creational, structural, behavioral。
  • GoF设计模式要解决的问题不少都是因为OO不承认全局变量和函数造成的。
  • GoF设计模式很多都是因为假设不能改变已有代码造成的,因此很多其实可以用refactoring的办法来解决。
  • GoF设计模式有一些本身就是反OO的,比如Singleton, Visitor。
  • GoF设计模式很多都是over design,考虑了太多的未来变化,因此设计变的非常复杂。这个与Ruby的设计准则"You Ain't Gonna Need It" 是相违背的。

下面是走马观花
  1. Strategy: OO不承认函数造成的
  2. Decrator: 就是平时常常提到的wrapper, 也属于中意与组合而不是继承
  3. Factory: 感觉是纯OO的东西。Factory method有两种,一种是effective Java里谈的,一种是GoF里谈的,我觉得都属于design pattern的范畴,但是要注意区分。因为平时所说的DP一般指GoF,但是我感觉前者可能更常用,所以这个比较容易confused。面试比较容易考到,感觉应该跟面试官说清楚。
  4. Observer: 太常用了,平时见到的什么event,notification都是这个pattern。
  5. Chain of Responsibility: 一看就想到了exception。除此之外,貌似driver的stack也是这个意思。
  6. Singleton: 不用多说了,OO不承认全局变量造成的,面试最容易考到,CC150上的代码问题太多。
  7. Flyweight: 这东西我感觉还真没怎么见过应用除了线程池。
  8. Adapter: 很常见。为了保持compatibility经常使用,也是wrapper, refactoring也可以解决。
  9. Facade: 思路太直接了,应用也很常见,感觉不需要学习也会用。
  10. Template: 感觉就是多态性的一个应用,不需要学习也会用。
  11. Builder: Leetcode说工作经常用,不过我没见过,当然我不是搞OO的。
  12. Iterator: 现在各个语言都实现了,再叫pattern恐怕不合适了。
  13. Composite: 看看Google, Linkedin的vector of vector的面试题吧。
  14. Command: 实在是太直接常见了,不需要学习也会用。
  15. Mediator: 现在流行MVC,不知道mediator的应用还广不广。
  16. State: 非常反FP的东西,不过IP里面还是很常用的。
  17. Proxy: 太常用了,不学也会用。
  18. Abstract Factory: 肯定也是纯OO的东西,我工作没有见过,当然我不是搞OO的。属于依赖于接口而不是实现。
  19. Prototype: 没怎么见过,能感觉到它是有用的。
  20. Bridge: 体现了中意与组合而不是继承, 某大牛面一个牛逼startup碰到过。
  21. Interpreter: 一看就很难。被王圻批判过。
  22. Memento: 感觉有用处,在考虑应用到自己工作项目中去。
  23. Visitor: 由于OO不承认函数造成的。也被王圻批判过。不过板上有人面试碰到过,工作中处理html的dom也用到过。

 青春就应该这样绽放  游戏测试:三国时期谁是你最好的兄弟!!  你不得不信的星座秘密

 
 

Things you can do from here:

 
 

No comments:

Blog Archive