• 浅尝DesignPattern_Strategy


    UML:

    ----------------------------------------------------------------------------------------------

    SAMPLE:

    Strategy.cs

    1 abstract class Strategy
    2 {
    3 public abstract void AlgorithmInterface();
    4 }

    ConcreteStrategyA.cs

    1 class ConcreteStrategyA:Strategy
    2 {
    3 public override void AlgorithmInterface()
    4 {
    5 Console.WriteLine("算法A实现");
    6 }
    7 }

    ConcreteStrategyB.cs

    1 class ConcreteStrategyB:Strategy
    2 {
    3 public override void AlgorithmInterface()
    4 {
    5 Console.WriteLine("算法B实现");
    6 }
    7 }

    ConcreteStrategyC.cs

    1 class ConcreteStrategyC:Strategy
    2 {
    3 public override void AlgorithmInterface()
    4 {
    5 Console.WriteLine("算法C实现");
    6 }
    7 }

    Context.cs

    1 class Context
    2 {
    3 Strategy strategy;
    4 public Context(Strategy strategy)
    5 {
    6 this.strategy = strategy;
    7 }
    8 public void ContextInterface()
    9 {
    10 strategy.AlgorithmInterface();
    11 }
    12 }

    ①当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择合适的行为.将这些行为封装在一个个独立的strategy类中,可以在使用这些行为的类中消除条件语句[DP].即"策略模式封装了变化".

    ②策略模式是用来封装算法的,但在时间中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性.

    ③在基本的处理模式中,选择所用具体实现的职责由客户端承担,封装给处理模式的context对象[DPE].策略模式和简单工厂模式结合后,选择具体实现的职责也可以由context来承担.

    1 class Context
    2 {
    3 Strategy strategy;
    4 public Context(string type)
    5 {
    6 switch (type)
    7 {
    8 case "A":
    9 strategy = new ConcreteStrategyA();
    10 break;
    11 case "B":
    12 strategy = new ConcreteStrategyB();
    13 break;
    14 case "C":
    15 strategy = new ConcreteStrategyC();
    16 break;
    17 }
    18 }
    19 }
  • 相关阅读:
    Memcached
    Keepalived
    Nginx配置根据客户端设备转发
    ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
    Linux系统下如何查看CPU个数
    Ubuntu 安装mysql和简单操作
    python类库26[web2py之基本概念]
    Ubuntu Server 12.04 静态IP简洁配置
    全面解读python web 程序的9种部署方式
    Python3实现连接SQLite数据库的方法
  • 原文地址:https://www.cnblogs.com/TivonStone/p/1716491.html
Copyright © 2020-2023  润新知