一是确定那些知识是需要掌握的,第二则是如何掌握。Pattern无疑是需要学习的,但事实是它很容易被遗忘,却很难在实际工作中熟练地运用。
方法就是将解决问题的模式与实际中某个重要的应用match起来。
1)Structural Pattern:
它们有一个共同特点,就是采用这些模式的客户端都以间接方式来访问提供服务的对象。以Proxy为例,Proxy广泛
应用在Java的RMI,MS的RPC,WCF中。
通过Proxy隐藏了对象的marshal, 网络的传输使得客户端可以象使用local object一样来访问。
Type Library就是一个适配器层,通过它VB可以访问C++编写的COM组件。Automation也是一个Adapter, 通过它脚本语言
也可以访问COM组件。
比如C++ Standard Library中的容器类采用Adapter模式可实现内部使用同一个容器类,对用户提供
Stack, queue, priority_queue等多种容器。
2) Behavioral Pattern:
- Strategy, State, Template method
这些模式基本上都是对问题本质的抽象,比如Strategy模式。以delegate为参数,例如delegate int calc(int x,int y) ;
由客户端来决定实际要执行的操作,可以将两个参数相加,也可以想减等等。这样服务器端的对象可以很好的处理客户
需求的变化。
- Chain of Responsibility, Command
- Iterator, Mediator, Observer
Iteraotr对于Java和.NET中的集合类都非常重要。对集合中的对象进行遍历是一个非常常见的操作。
Observer是一个重点。MVC可以说就是此模式的一个典型应用。MVC无论是在web开发还是在桌面开发现在都是最主流的。
例如ASP.NET MVC, WPF中的MVVM。JAVA 中的struts等。
- Visitor, Interpreter, Memento
3) Creational Pattern:
- Prototype, Factory Method, Singleton
- Abstract Factory, Builder