java:23种设计模式-策略模式

88 阅读2分钟

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在策略模式中,有一个中央策略对象,它存储一组算法,并且可以动态地选择要使用的算法。

策略模式的核心思想是封装一组算法,将它们分别封装在各自的实现类中,并且使用一个中央策略对象来管理这些算法。这样,就可以在运行时选择不同的算法,而无需修改已有的算法类。

策略模式的关键是解耦,使得算法与使用它们的客户端之间没有固定的依赖关系。这样,当需要修改算法时,只需要修改策略对象,而无需修改客户端。

策略模式有三个主要组件:

  1. 策略对象 (Strategy):存储一组算法,并负责选择要使用的算法。
  2. 算法实现类 (Strategy):实现策略对象中存储的算法。
  3. 客户端 (Client):使用策略对象中的算法。

定义策略的内容,写了个简单的例子就是计算两个值的策略

public class MyClient {

    public int totalCal(int a ,int b,calculateTotal calculateTotal){
        return calculateTotal.total(a, b);
    }


    public static void main(String[] args) {
        int a = 10;
        int b =20;
        MyClient myClient = new MyClient();
        int i = myClient.totalCal(a, b, new AddStra());
        System.out.println(myClient.totalCal(a, b, new MultStra()));
        System.out.println(i);
    }
}

策略的实现有如下三种:求和,最大,乘积

public class AddStra implements calculateTotal{

    @Override
    public int total(int a, int b) {
        return a+b;
    }
}
public class MaxStra implements calculateTotal{

    @Override
    public int total(int a, int b) {
        return a >=b? a:b;
    }
}
public class MultStra implements calculateTotal{

    @Override
    public int total(int a, int b) {
        return a*b;
    }
}

最后一个是我列举的使用的方案,

public class MyClient {

    public int totalCal(int a ,int b,calculateTotal calculateTotal){
        return calculateTotal.total(a, b);
    }


    public static void main(String[] args) {
        int a = 10;
        int b =20;
        MyClient myClient = new MyClient();
        int i = myClient.totalCal(a, b, new AddStra());
        System.out.println(myClient.totalCal(a, b, new MultStra()));
        System.out.println(i);
    }
}

后续的可以通过对策略接口实现不同的策略方式,来达成不同的计算效果。而不需要修改原来代码逻辑。更好的帮助应用解耦,以及扩展