当前位置: 移动技术网 > IT编程>开发语言>Java > 结合案例深入解析策略模式

结合案例深入解析策略模式

2019年06月14日  | 移动技术网IT编程  | 我要评论

一、基本概念

策略模式是行为型设计模式。

其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。

策略模式使得算法可以在不影响到客户端的情况下发生变化。

二、结构

下面是基本结构:

 

 

三类角色:

  • 环境(context)角色:持有一个strategy的引用。
  • 抽象策略(strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(concretestrategy)角色:包装了相关的算法或行为。

三、案例

案例实现:

定义一族算法,可以实现对两个数的操作,例如+、-、*、/等。

实现代码整体框架图:

 

 

具体代码实现:

context类:

/**
 * context 是一个使用了某种策略的类。 实现了 strategy 接口的实体策略类
 */
public class context {

    private strategy strategy;

    public context(strategy strategy) {
        this.strategy = strategy;
    }

    public int executestrategy(int num1, int num2){
        return strategy.dooperation(num1, num2);
    }
}
strategy接口:

/**策略的公共接口*/
public interface strategy {
    int dooperation(int num1, int num2);
}

 

三种对应的算法实现:

/** 算法1: 实现加法 */
public class operationadd implements strategy {
    @override
    public int dooperation(int num1, int num2) {
        return num1 + num2;
    }
}
/** 算法2:实现减法 */
public class operationsubstract implements strategy{
    @override
    public int dooperation(int num1, int num2) {
        return num1 - num2;
    }
}
/** 算法3: 实现乘法 */
public class operationmultiply implements strategy{
    @override
    public int dooperation(int num1, int num2) {
        return num1 * num2;
    }
}

 

测试类:

public class mytest {
    public static void main(string[] args) {

        context context = new context(new operationadd());

        system.out.println("10 + 5 = " + context.executestrategy(10, 5));

        context = new context(new operationsubstract());
        system.out.println("10 - 5 = " + context.executestrategy(10, 5));

        context = new context(new operationmultiply());
        system.out.println("10 * 5 = " + context.executestrategy(10, 5));
    }
}

 

程序输出:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

 

四、总结

  • 策略模式的重心不是如何实现算法,而是如何组织、调用这些算法;
  • 策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换;
  • 使用策略模式可以避免使用多重条件(if-else)语句;
免费java高级资料需要自己领取,涵盖了java、redis、mongodb、mysql、zookeeper、spring cloud、dubbo高并发分布式等教程,一共30g。
传送门:

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网