文字显示结果
组合搜索  计算机图书分类目录
 
所在位置: 图书 -> 在线试读 -> 你必须知道的.NET(第2版) 
                 

第3章 OO之美

3.3 模式的起点

本节将介绍以下内容:

  设计模式概要

  面向对象

3.3.1  引言

设计模式是面向对象思想的集大成,GOF在其经典著作《设计模式:可复用面向对象软件的基础》中总结了23种设计模式,又可分为:创建型、结构型和行为型3个大类。对于软件设计者来说,一般的过程就是在熟练掌握语言背景的基础上,了解类库的大致框架和常用的函数和接口等,然后在百般锤炼中提高对软件设计思想的认识。

软件设计者要清楚自己的定位和方向,一味地沉溺于技术细节的思路是制约个人技术走向成熟的毒药。因此,学习软件设计,了解软件工程,是每个开发人员必备的一课。在本节,我们不欲详细描述各个设计模式的细节,GoogleBaidu上的信息已经多如牛毛了,而只提纲挈领式地做以梳理,将23种模式中的关键模式拿出来晒晒。

3.3.2  模式的起点

¡  工厂方法(Factory Method Pattern

模式起点:将程序中创建对象的操作单独进行处理,大大提高了系统扩展的柔性,接口的抽象化处理给相互依赖的对象创建提供了最好的抽象模式。

典型应用:工厂方法模式是最简单也最容易理解的模式之一。其关注的核心是对于对象创建这件事儿的分离。

¡  单例(Singleton Pattern

模式起点:一个类只有一个实例,且提供一个访问全局点的方式,更加灵活地保证了实例的创建和访问约束,并且唯一约束的实施由类本身实现。

典型应用:一个类只有一个实例,经常被应用于Façade模式,称为单例外观。

¡  命令(Command Pattern

模式起点:将请求封装为对象,从而将命令的执行和责任分开。通常在队列中等待命令,这和现实多么相似呀。如果你喜欢发号施令,请考虑你的ICommand吧。

典型应用:菜单系统。

¡  策略(Strategy Pattern

模式起点:策略模式,将易于变化的部分封装为接口,通常Strategy 封装一些运算法则,使之能互换。

典型应用:数据层常考虑以策略提供算法和数据的分离。

¡  迭代器(Iterator Pattern

模式起点:相信任何的系统中,都会用到数组、集合、链表、队列这样的类型吧,那么你就不得不关心迭代模式的来龙去脉。在遍历算法中,迭代模式提供了遍历的顺序访问容器,GOF给出的定义为:提供一种方法访问一个容器(Container)对象中各个元素,而又无须暴露该对象的内部细节。

典型应用:.NET中就是应用了迭代器来创建用于foreach的集合。

¡  模板方法(Template Method Pattern

模式起点:顾名思义,模板方法就是在父类中定义模板,然后由子类实现。具体的实现一般由父类定义算法的骨架,然后将算法的某些步骤委托给子类。

典型应用:ASP .NETPage类。

¡  观察者(Observer Pattern

模式起点:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者和被观察者的分开,为模块划分提供了清晰的界限。

典型应用:在.NET中使用委托和事件可以更好地实现观察者模式,事件的注册和撤销不就对应着观察者对其对象的观察吗?

¡  职责链(Chain of Responsibility Pattern

模式起点:将操作组成一个链表,通过遍历操作链表找到合适的处理器。通过统一的接口,被多个处理器实现,每个处理器都有后继处理器,可以将请求沿着处理器链传递。

典型应用:GUI系统的事件传播。

¡  桥接(Bridge Pattern

模式起点:把实现和逻辑分开,对于我们深刻理解面向对象聚合复用的思想甚有助益。

典型应用:多版本.NET Framework通过环境变量与对应版本应用建立桥梁。

¡  代理(Proxy Pattern

模式起点:将复杂的逻辑封装起来,通过代理对象控制实际对象的创建和访问,由代理对象屏蔽原有逻辑的复杂性,同时控制其可访问性。

典型应用:WCF服务代理。

¡  装饰器(Decorator Pattern

模式起点:为原有系统,动态地增加或者删除状态和行为,在继承被装饰类的同时包含被装饰类的实例成员。

典型应用:.NETStream的设计。

¡  门面(Façade Pattern

模式起点:将表现层和逻辑层隔离,封装底层的复杂处理,为用户提供简单的接口,这样的例子随处可见。门面模式很多时候更是一种系统架构的设计,在很多项目中,都实现了门面模式的接口,为复杂系统的解耦提供了最好的解决方案。

典型应用:WSDL就是一个典型的平台无关的门面应用。

¡  组合(Composite Pattern

模式起点:不管是个体还是组件,都包含公共的操作接口,通过同样的方式来处理一个组合中的所有对象。组件的典型操作包括:增加、删除、查找、分组和获取子元素等。

典型应用:树形结构的数据组织。

¡  适配器(Adapter Pattern

模式起点:在原类型不做任何改变的情况下,扩展了新的接口,灵活且多样地适配一切旧俗。这种打破旧框框、适配新格局的思想,是面向对象的精髓。以继承方式实现类的Adapter模式和以聚合方式实现对象的Adapter模式,各有千秋,各取所长。看来,把它叫做包装器一点也不为过。

典型应用:RCWRuntime Callable Wrapper)在COM Interop中的应用。

模式本身还有很多的故事和细节,在《设计模式:可复用面向对象软件的基础》中总结了23种设计模式,其大致的分类如表3-2所示。

3-2  经典设计模式

   

   

创建型模式

工厂方法

 

抽象工厂

 

单例

 

创建者

 

原型模式

结构型模式

桥接

 

适配器

 

组合

 

外观

 

装饰

 

享元

 

代理

行为型模式

模板方法

 

迭代器

 

中介者

 

职责链

 

解释器

 

命令

 

观察者

 

备忘录

 

状态模式

 

策略模式

 

访问者

3.3.3  模式的建议

模式不是万能妙药,了解和熟悉模式的最终意义在于放下模式,此时无剑胜有剑,模式的建议如下:

·  不要拿着GOF的书,从头看到尾,对我们来说那是圣经也是字典,系统地学习其实意义不大,常来翻翻反而收获更丰。

·  在软件设计中体会设计模式,设计就是不断地由需求生成的重构。

·  结合.NET Framework框架来学习设计模式在.NET中的应用,对了解设计模式来说是一举两得的事,既体味了设计,又深谙了框架。

·  重构、不断地重构。

·  切勿因模式而模式,任何模式的套用都意味着实现的复杂升级和执行的性能损耗。

3.3.4  结论

仁者见仁。以上只是笔者一家之言,更重要的真知灼见皆来源于实践,设计思想和模式的应用也来源于不断的学习和反复。此文只是开端,未来需要不断的探索。

 
 
  上一页 返回 下一页  
 
Copyright © 2010 TianMei Technology All rights reserved. To comment on this site
  辽B-2-4-20100065