设计模式之策略模式的介绍

前言

在给人介绍设计模式的时候,总是由于记忆不清楚导致效果不好。索性写文章记下来,正所谓好记性不如烂笔头,以后切记总结思考,不断进步。

开始

在策略模式中,一个类的行为或者算法可以在运行时候更改,这种类型的设计模式属于行为型模式。在策略模式中,我们创建各种策略对象和一个行为随着
策略对象改变而改变的context对象,策略对象改变context对象的执行算法。

意图: 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
解决: 在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

优点: 算法可以自由的切换,避免使用多重的if/else判断,扩展性良好。
缺点: 策略类会增多,并且策略类要对外暴露方法。

使用场景:1.如果在一个系统里面有许多类,他们的区别仅在于他们的行为,那么使用策略模式可以让一个对象在许多行为中选择一种行为;2.如果一个对象有很多行为,如果使用不当的设计模式,这些行为就只好使用多重的条件选择语句来实现。

实现

创建一个接口:

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 OperationMultiply implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }}

创建context类:

public class Context {
    private Strategy strategy;
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }

    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }}

使用 Context 来查看当它改变策略 Strategy 时的行为变化:

public class Context {
    private Strategy strategy;
    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }

    public static void main(String[] args) {
        Context context = new Context();
        context.setStrategy(new OperationAdd());
        System.out.println(context.executeStrategy(1, 2)); //输出 3

        context.setStrategy(new OperationMultiply());
        System.out.println(context.executeStrategy(3, 4)); //输出12
    }}

这就是策略模式的基本用法了,大胆的在项目中运用他吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容