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" 是相违背的。
下面是走马观花
- Strategy: OO不承认函数造成的
- Decrator: 就是平时常常提到的wrapper, 也属于中意与组合而不是继承
- Factory: 感觉是纯OO的东西。Factory method有两种,一种是effective Java里谈的,一种是GoF里谈的,我觉得都属于design pattern的范畴,但是要注意区分。因为平时所说的DP一般指GoF,但是我感觉前者可能更常用,所以这个比较容易confused。面试比较容易考到,感觉应该跟面试官说清楚。
- Observer: 太常用了,平时见到的什么event,notification都是这个pattern。
- Chain of Responsibility: 一看就想到了exception。除此之外,貌似driver的stack也是这个意思。
- Singleton: 不用多说了,OO不承认全局变量造成的,面试最容易考到,CC150上的代码问题太多。
- Flyweight: 这东西我感觉还真没怎么见过应用除了线程池。
- Adapter: 很常见。为了保持compatibility经常使用,也是wrapper, refactoring也可以解决。
- Facade: 思路太直接了,应用也很常见,感觉不需要学习也会用。
- Template: 感觉就是多态性的一个应用,不需要学习也会用。
- Builder: Leetcode说工作经常用,不过我没见过,当然我不是搞OO的。
- Iterator: 现在各个语言都实现了,再叫pattern恐怕不合适了。
- Composite: 看看Google, Linkedin的vector of vector的面试题吧。
- Command: 实在是太直接常见了,不需要学习也会用。
- Mediator: 现在流行MVC,不知道mediator的应用还广不广。
- State: 非常反FP的东西,不过IP里面还是很常用的。
- Proxy: 太常用了,不学也会用。
- Abstract Factory: 肯定也是纯OO的东西,我工作没有见过,当然我不是搞OO的。属于依赖于接口而不是实现。
- Prototype: 没怎么见过,能感觉到它是有用的。
- Bridge: 体现了中意与组合而不是继承, 某大牛面一个牛逼startup碰到过。
- Interpreter: 一看就很难。被王圻批判过。
- Memento: 感觉有用处,在考虑应用到自己工作项目中去。
- Visitor: 由于OO不承认函数造成的。也被王圻批判过。不过板上有人面试碰到过,工作中处理html的dom也用到过。
青春就应该这样绽放 游戏测试:三国时期谁是你最好的兄弟!! 你不得不信的星座秘密
Things you can do from here:
- Subscribe to Peking2-Leetcode面试算法 using Google Reader
- Get started using Google Reader to easily keep up with all your favorite sites
No comments:
Post a Comment