幸运星空

Lucker的程序人生

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

(根据MSDN WebCast相关课程整理)

这是一种应用非常广泛的行为型设计模式。

对象可能经常需要用多种不同的算法,但是如果变化频繁,会将类型变得很脆弱。

clip_image002

如上图所示,对于一个立方休,取不同的截面,那么它的面积计算方法就会不同,需要采用不同的算法。

那么,如何在运行时,不更改方法而动态的设计算法呢?将算法与对象解耦,实现动态加载。

C#中动态可加载以支持运行时变化的技术手段有:

虚函数,接口,委托,反射

GoF:定义一系列算法,把它们一个个封装起来,并且使它们可互相替换,该模式使得算法可以独立于使用它的客户系统的变化。

一个没有采用策略模式的示例:

clip_image004

clip_image006

采用策略模式后,实现了算法策略与具体对象的分离,这样在同一个对象中,传入不同的策略对象,就可以实现不同的算法,从而达到动态改变算法的目的。

clip_image008

<完>

posted on 2012-03-23 12:05  Lucker  阅读(728)  评论(0编辑  收藏  举报