zoukankan      html  css  js  c++  java
  • 老生常谈:策略模式

         本来园子里面已经有很多特别好的关于设计模式学习的文章,但一般都是概念性的或者都是些简单实例,没有用过设计模式的朋友看过之后虽然明白怎么回事了,但是对于自己实际项目中何时用设计模式就不太清楚了,本人借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

  • 相关阅读:
    【转】C#常用的集合类型(ArrayList类、Stack类、Queue类、Hashtable类、SortedList类)
    【转】第三方控件安装方法
    【jQuery插件】chackTextarea类似于新浪腾讯微博文本域字符数判断
    【转】关于wBox iFrame回调关闭问题的解决方案
    【转】jquery插件
    db4o助手 do4oHelper
    【转】C# 中文URL编码
    【转】C#集合之Hashtable
    【转】Web页面导出标准的Excel/Word/txt的代码实现
    jQuery图片居中裁切效果
  • 原文地址:https://www.cnblogs.com/ASPNET2008/p/1164755.html
Copyright © 2011-2022 走看看