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

    设计模式--策略模式

    1、策略模式

      策略模式:定义一些列算法,把它们一个个的封装起来,并且使它们可以相互替换,该模式可以使得算法独立于使用它的客户而变化。

    2、策略模式的结构

    • 角色

      • 策略:策略是一个接口,该接口定义了若干算法,也即是若干的抽象方法;

      • 上下文:上下文是依赖于策略接口的类,即上下文包含策略声明的变量,上下提供一个方法,该方法委托策略变量调用具体策略所

      • 具体策略:具体策略是实现策略接口的类,它需要实现策略接口中定义的抽象方法。

    • 类图

    3、策略模式举例

    策略接口:Strategy.java

    package com.nick.pattern.strategy;
    /**
     * 抽象策略接口:定义若干抽象方法
     * @author nick
     */
    public interface Strategy {
       public abstract void algorithm();
    }

    上下文:Context.java

    package com.nick.pattern.strategy;
    /**
     * 上下文类
     * @author nick
     */
    public class Context {
        Strategy strategy;  //定义策略变量
        public void setStrategy(Strategy strategy){
            this.strategy=strategy;     //设置策略
        }
        void lookAlgorithm(){    //定义的一个方法
            strategy.algorithm();      //在方法中委托策略变量调用策略接口中的抽象方法
        }
    }

    具体策略A: StrategyA.java

    package com.nick.pattern.strategy;
    /**
     * 具体策略类A(实现策略接口)
     * @author nick
     */
    public class StrategyA implements Strategy{
        @Override
        public void algorithm() {
            System.out.println("调用算法A");
        }
    }

    具体策略B: StrategyB.java

    package com.nick.pattern.strategy;
    /**
     * 具体策略类B
     * @author  nick
     */public class StrategyB implements Strategy {
        @Override
        public void algorithm() {
            System.out.println("调用算法B");
        }
    }

    主程序

    package com.nick.pattern.strategy;
    /**
     * 主程序
     * @author  nick
     */
    public class Application {
        public static void main(String[] args) {
            Context context = new Context();        //定义上下文对象
            context.setStrategy(new StrategyA());   //给上下文对象设置策略算法A
            context.lookAlgorithm();                //在该算法下进行计算
            context.setStrategy(new StrategyB());   //给上下文对象设置策略算法B
            context.lookAlgorithm();                //在算法B下进行计算
        }
    }

    运行结果:

       

    4、策略模式的优缺点

    • 优点1:上下文和具体策略是松耦合的关系。因此上下文只知道它要使用某一个实现Strategy接口类的实例,但不需要关心是哪个类在实现。

    • 优点2:策略模式满足“开-闭”原则。当增加新的具体策略时,不需要修改上下文类的代码,上下文就可以引用新的具体策略的实例。 

     

     

     

     

     

  • 相关阅读:
    jquery1.9以上版本如何使用toggle函数
    oracle分区表知识
    oracle删除表以及清理表空间
    oracle查询单表占用空间的大小
    CSS样式案例(2)-制作一个简单的登录界面
    oracle数据库启动
    创业项目
    dataguru试听课程
    从机器学习谈起
    your project contains error(s),please fix them before running your application.错误总结
  • 原文地址:https://www.cnblogs.com/sinlearn/p/11881452.html
Copyright © 2011-2022 走看看