image

编辑人: 沉寂于曾经

calendar2025-05-10

message3

visits872

策略模式 Strategy

分析&回答

策略模式定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。本模式使得算法的变化不会影响到使用算法的客户。

策略模式将每一个算法封装到一个具有公共接口的独立类中,解除了客户与具体算法的直接耦合,是客户改变算法更为容易。

策略模式+简单工厂+反射+配置文件可以组成更为灵活的方式。

image-1691391934075

实例代码讲解:

/**
 * 算法的公共接口
 */
abstract public class Strategy{
    public abstract void AlgorithmInterface();
}

/**
 * 具体算法A
 */    
public class ConcreteStrategyA:Strategy{
    public override void AlgorithmInterface(){
        Console.Write("具体算法A");
    }
}

/**
 * 具体算法B
 */    
public class ConcreteStrategyB:Strategy{
    public override void AlgorithmInterface(){
        Console.Write("具体算法B");
    }
}

/**
 * 具体算法C
 */
public class ConcreteStrategyC:Strategy{
    public override void AlgorithmInterface(){
        Console.Write("具体算法C");
    }
}

/**
 * 上下文,用来维护一个对Strategy对象的引用。
 */
public class Context{
    private Strategy strategy;

    public Context(Strategy strategy){
        this.strategy=strategy;
    }

    //上下文接口  
    public void ContextInterface(){
        strategy.AlgorithmInterface();
    }
}

/**
 * client端
 * @param args
 */
static void Main(string[] args)
{
    Context context = new Context(new ConcreteStrategyA());
    context.ContextInterface();

    context = new Context(new ConcreteStrategyB());
    context.ContextInterface();

    context = new Context(new ConcreteStrategyC());
    context.ContextInterface();

    Console.ReadLine();
}

反思&扩展


创作类型:
原创

本文链接:策略模式 Strategy

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share