zoukankan      html  css  js  c++  java
  • ​设计模式之策略模式

    ​设计模式之--策略模式

    1,定义:策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

    2,“策略”理解:一个策略就是一个计划,通过执行计划,我们在既定的输入下给出特定的输出。一般情况下,为了获得这个输出,使用策略比使用算法要有更为广阔的选择空间。因此,策略通常可以表达为一组方案,这些方案之间可以进行互相替换(也可以理解为一组算法)。

            使用策略模式可以把相互之间能够替换的策略封装在某些类的内部,这些类通常是互相分离的,每个类都会实现一个同策略类独立完成。这些显现了不同策略的类在本质上都是实现了同一个操作,所以他们之间可以进行互相转换,正式由于这种相互替换的特点使得程序可以给用户的不同输入提供不同的策略。

    3,适用情况:

        1),很多相关的类知识在行为上有差异;

        2),当需要使用一个算法的不同变体时;

        3),使用算法的客户不应该知道算法的具体结构时;

        4),当一个类定义了多种行为并且这些行为在这个类的操作中可以多个条件语句的形式出现时。

    4,代码:

            主类:Main.class

            public class Main {

               public static void main(String[] args) {

                 Context context;

                 context = new Context(1);

                 context.GetDecision();

                 context = new Context(2);

                 context.GetDecision();

                 context = new Context(3);

                 context.GetDecision();

               }

            }

            上下文类:Context.class

        ​    ​public class Context {

        ​    ​   Strategy strategy;

        ​    ​   public Context(int i) {

        ​    ​     switch (i) {

        ​    ​       case 1:

        ​    ​         strategy = new ConcreteStrategyA();

        ​    ​         break;

        ​    ​       case 2:

        ​    ​         strategy = new ConcreteStrategyB();

        ​    ​         break;

        ​    ​       case 3:

        ​    ​         strategy = new ConcreteStrategyC();

        ​    ​         break;

        ​    ​       default:

        ​    ​         break;

        ​    ​     }

        ​    ​   }

        ​    ​

        ​    ​   public void GetDecision(){

        ​    ​     strategy.Algorithm();

        ​    ​   }

        ​    ​}

        ​    ​抽象的策略类代码:Strategy.class:

        ​    ​public abstract class Strategy {

        ​    ​   public abstract void Algorithm();

        ​    ​}

        ​    ​策略类A:ConcreteStrategyA.class:

        ​    ​public class ConcreteStrategyA extends Strategy{

        ​    ​   @Override

        ​    ​   public void Algorithm() {

        ​    ​     System.out.println("策略A");

        ​    ​   }

        ​    ​}

        ​    ​策略类B:ConcreteStrategyB.class:

        ​    ​public class ConcreteStrategyB extends Strategy{

        ​    ​        @Override

        ​    ​        public void Algorithm() {

        ​    ​           System.out.println("策略B");

        ​    ​        }

        ​    ​}

        ​    ​

            策略类C:ConcreteStrategyC.class:

            public class ConcreteStrategyC extends Strategy{

                    @Override

                    public void Algorithm() {

                       System.out.println("策略C");

                    }

            }

    运行结果:

        ​    ​策略A

        ​    ​策略B

        ​    ​策略C

  • 相关阅读:
    zoj 1239 Hanoi Tower Troubles Again!
    zoj 1221 Risk
    uva 10192 Vacation
    uva 10066 The Twin Towers
    uva 531 Compromise
    uva 103 Stacking Boxes
    稳定婚姻模型
    Ants UVA
    Golden Tiger Claw UVA
    关于upper、lower bound 的探讨
  • 原文地址:https://www.cnblogs.com/zhengjunfei/p/4724699.html
Copyright © 2011-2022 走看看