随笔-137  评论-1674  文章-1  trackbacks-63

     本来园子里面已经有很多特别好的关于设计模式学习的文章,但一般都是概念性的或者都是些简单实例,没有用过设计模式的朋友看过之后虽然明白怎么回事了,但是对于自己实际项目中何时用设计模式就不太清楚了,本人借jillzhang开发的控件中的部分代码与大家讨论下模式在具体项目中的应用,好的代码应该与大家分享.

    名词解释:

    策略:
         1:战略(学)

         2:策略, 计谋, 作战方针; 智谋, 手腕

   从策略一词来看,策略模式是种倾向于行为的模式.有点类似找仗时的做战方案,一般司令员在做战前都会根据实际情况做出几套不同的方案,如果当时情况有变,就会根据相应的条件来判定用哪一套方案来替换原定方案。但无论如何替换,替换多少次,仗还是要打的。

    在他的文章中给GRIDVIEW添加上数据导出成EXCEL,WORD,PDF文件的功能,这三类导出虽然具体操作略有不同,但是大部分都相同。

    具体策略模式的类图:

   

    

    策略模式定义(GOF):

         策略模式:主要是定义一系列的算法,把这些算法一个个封装成拥有共同接口的类,它们之间可以互换。使客户端调用它们的时候能够互不影响地变化。

    具体代码如下:

    第一:数据导出的接口类:IExporter

      抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。

Code

   

     下面为实现了此接口的抽象类

Code

 

    第二:context

   环境(Context)角色:持有一个Strategy类的引用

Code

 

   第三:具体实现类

   具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。

     下面是三个具体操作类

Code

     PdfExporter:

Code

     WordExporter:

Code

    

    策略模式优点

          算法的使用和算法本身解耦,即把变化的具体算法封装了起来。策略模式是除了继承之外的一种弹性替代方案,如果你使用继承定义了一个类,下面有部分的派生类,此时你会让基类所困住,要想修改它特别不容易,而策略模式则可能通过组合不同的对象来改变行为。 

    策略模式缺点

          1、 虽说客户代码无须关心各个策略是如何实现的,但是它们还是要知道有多少种策略实现,具体功能情况,这样才可以根据需要使用哪个策略。

         2、 使用策略模式后出现很多小类。

    总结

         设计模式的有效应用能够给我们的开发带来效率,同时也是把双刃剑,滥用设计模式往往会费力不计好。本人在实际开发中对于模式的应用还不是特别多,如果有什么地方说错了,还望大家谅解.  

注:

        本文引用:

                 http://blog.csdn.net/ai92/archive/2004/12/26/229825.aspx

 

Tag标签: 设计模式
posted on 2009-02-09 17:11 姜敏 阅读(2075) 评论(12)  编辑 收藏 网摘 所属分类: 设计模式

评论:
#1楼 2008-04-22 10:11 | 侯垒      
支持一个.
  回复  引用  查看    
#2楼[楼主] 2008-04-22 10:35 | 姜敏      
@侯垒
谢谢支持,希望以后有好的代码能够分享

  回复  引用  查看    
#3楼 2008-04-22 13:09 | 镜涛      
--引用--------------------------------------------------
侯垒: 支持一个.
--------------------------------------------------------

  回复  引用  查看    
#4楼 2008-04-22 15:51 | Tony Zhou      
第一遇到用最简单的方法解决,再而三,抽出来改
  回复  引用  查看    
#5楼 2008-04-22 21:02 | Vincent      
如果能够再实现ClassEnum Parttern的话,swith case就可以去掉了.
  回复  引用  查看    
#6楼[楼主] 2008-04-23 09:44 | 姜敏      
@Vincent
如果能够再实现ClassEnum Parttern的话,swith case就可以去掉了.

谢谢您的指教,我会注意的。

  回复  引用  查看    
#7楼 2009-02-09 18:31 | 蓝天之上      
说实话看的不是很懂哎!
  回复  引用  查看    
#8楼 2009-02-10 22:51 | 蓝天之上      
自己研究了下,貌似懂了!
谢谢分享!

  回复  引用  查看    
#9楼[楼主] 2009-02-10 23:41 | 姜敏      
@蓝天之上
这篇文章写的比较早,都是刚开始学习设计模式时写的,理解不太深入.

  回复  引用  查看    
#10楼 2009-02-12 15:54 | Todd Wei      
难以理解下面提到的缺点。如果说选择具体策略的权利在用户,那么这是优点,因为灵活;如果选择具体策略非用户,那么他不需要知道有多少种策略。

----引用----
策略模式缺点:1、 虽说客户代码无须关心各个策略是如何实现的,但是它们还是要知道有多少种策略实现,具体功能情况,这样才可以根据需要使用哪个策略。

  回复  引用  查看    
#11楼[楼主] 2009-02-12 16:07 | 姜敏      
策略模式在客户端调用时,要知道具体有多少种算法,这样才能从所有的算法中选一种合适的算法来执行。
  回复  引用  查看    
#12楼 2009-02-12 16:12 | Todd Wei      
--引用--------------------------------------------------
姜敏: 策略模式在客户端调用时,要知道具体有多少种算法,这样才能从所有的算法中选一种合适的算法来执行。
--------------------------------------------------------
不认同这算缺点,策略模式不就是为了这个目标来的吗?根据需要随意替换。

  回复  引用  查看    
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1164755




相关文章:

相关链接: