• Strategy


    定义

      策略模式属于对象的行为模式。针对一组算法(行为,策略),将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生改变。

    解决问题

      算法(行为)和客户端耦合在一起,客户端要利用条件选择语句来决定使用哪一个算法。使得客户端的代码变得复杂和难以维护,也不利于代码重用。

    结构和角色

        

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

             抽象策略(Strategy)角色 : 所有具体策略的父类,可以是抽象类,接口,此角色用于定义具体策略类的行为。

             具体策略(ConcreteStrategy)角色 :  封装具体的算法或行为。

    public class Context {
        private Strategy strategy;  // 省略 set get 方法
    
        public void contextOperation() {
            strategy.operation();
        }  
    
    }
    public  interface Strategy{
        public void operation();
    }
    
    
    public class ConcreteStrategy implements Strategy{ 
        public void operation() {
        // ...
        } 
    }
    
    public class ConcreteStrategy2 implements Strategy{
        public void operation() {
        // ...
        } 
    }

    项目中使用例子

      项目的界面显示数据表有普通表格,自动排序,可拖拽,等几种表格。

    Table和View是分离的,在View中可以根据需求设置Table。如果增加Table类型,不会影响到View。Table也是可重用的。

    (二)

      打印报表时,可以选择多种文件显示,这里也用到了策略模式。(具体省略)

    使用场景

      一个系统需要动态地在几种算法中选择一种。

      一个系统的算法使用的数据不可以让客户端知道,即算法的具体实现对客户端是隐藏的。

      如果一个对象有很多行为,且需要使用多重条件选择语句来实现。

    优缺点

      封装算法,使算法和客户端分离,降低耦合,使得算法本身具有可重用性。

      策略模式提供了管理相关的算法族的方法,策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复代码。

      策略模式提供了替换继承关系的办法。

      避免使用多重条件转移语句。

      缺点

      客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

      策略模式造成很多的策略类。

    Strategy模式背后的三个面向对象设计原则:

      封装变化,算法是可以变化的,所以将它与客户端分离使得算法的变化不影响客户端,降低耦合。封装后的算法可重用。

      面向接口编程,要使具体策略类能够相互替换,那么客户端内必须要有他们共同的接口。

      组合优于继承,环境类使用的是组合而非继承。

  • 相关阅读:
    细心也是一种态度
    EDM数据访问的三种方式
    如何快速提交网站备案 ICP备案
    c# winform 关于给静态全局变量赋值的问题
    c#DIY随机数类winform 2010
    手把手教你如何用IIS搭建手机WAP网站(图文)
    admin密码对应的MD5值,16位和32位,admin解密自己留着方便.
    C#实现MD5加密,winform c#2005
    最全的c#日期函数 winform
    如何解决因网站备案号没下来而网站被迫关闭的办法
  • 原文地址:https://www.cnblogs.com/shouwangzhe-/p/3562276.html
Copyright © 2020-2023  润新知