zoukankan      html  css  js  c++  java
  • 策略模式 Strategy

    public Context(String strategyType)
    
    {
    
    switch(strategyType)
    
    {
    
    case "算法A":
    
         strategy=new ContextStrategyA();
    
         break;
    
    case "算法B":
    
         strategy=new ContextStrategyB();
    
         break;
    
    ...............
    
    }
    
    }

    DF对策略模式的定义是这样的:它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户(main函数)。

    abstract class Strategy
    
    {
    
    public abstract void AlgorithmInterface();
    
    }
    class ConcreteStratrgyA extends Strategy
    
    {
    
     @override
    
    public void AlgorithmInterface()
    
    {
    
       //算法A的具体实现。
    
    }
    
    }
    class ConcreteStrategyB extends Strategy
    
    {
    
     @override
    
    public void AlgorithmInterface()
    
    {
    
      //算法B的具体实现
    
    }
    
    }
    class Context
    
    {
    
    Strategy strategy;
    
    public Context(Strategy strategy)
    
    {
    
    this.strategy=strategy;
    
    }
    
    public void ContextInterface)
    
    {
    
    strategy.AlgorithmInterface();
    
    }
    
    }

    在Context类的构造方法中可以使用简单工厂模式,实现策略模式和简单工厂模式的结合。

    public static void main(String[] args)
    
    {
    
    Context context;
    
    context=new Context(new ContextStrategyA());
    
    context.ContextInterface();
    
    
    
    context=new Context(new ContextStrategyB());
    
    context.ContextInterface();
    
    }
  • 相关阅读:
    OC 消息机制本质
    Lua中的闭包
    Lua中的函数
    Lua中的语句
    Lua中的表达式
    Lua中的类型与值
    Unity3D之通过C#使用Advanced CSharp Messenger
    C#中sealed关键字
    C#委托delegate、Action、Func、predicate 对比用法
    Unity3D之IOS&Android收集Log文件
  • 原文地址:https://www.cnblogs.com/wangjiyuan/p/Strategy.html
Copyright © 2011-2022 走看看