工作生活

设计模式学习-策略模式

2019-06-30  本文已影响0人  m1Ku

定义

在开发中,我们为了解决一个业务逻辑,可能会根据不同的情况采取不同的策略或者算法来解决,通常会将这些算法写在一个类中,通过if else或者switch case来选择。但是这种方式代码耦合性太高,代码臃肿,而且也不符合开闭原则。而策略模式能很好地解决这类问题。

策略模式定义了一系列算法,并将每一个算法封装起来,并且他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

UML类图

策略模式.png

策略模式的角色

示例

我们将数学的四则运算抽象成一个运算策略,并实现对应的具体运算策略,在需要计算时注入相应的具体运算策略即可。

/**
 * 运算策略的抽象
 */
public interface MathOperation {
    int operate(int param1, int param2);
}

/**
 * 加法运算策略
 * 实现具体的加法策略逻辑
 */
public class AddOperation implements MathOperation {
    @Override
    public int operate(int param1, int param2) {
        return param1 + param2;
    }
}

/**
 * 减法运算策略
 * 实现具体的减法策略逻辑
 */
public class SubtractOperation implements MathOperation {
    @Override
    public int operate(int param1, int param2) {
        return param1 - param2;
    }
}

/**
 * 用来操作策略的上下文对象
 * 通过setOperation方法注入具体的运算策略
 */
public class Context {
    private MathOperation operation;

    public void setOperation(MathOperation operation) {
        this.operation = operation;
    }

    public int operate(int param1, int param2) {
        return operation.operate(param1, param2);
    }
}

public static void main(String []args){
        Context context = new Context();
        
        context.setOperation(new AddOperation());
        System.out.println("1+2的结果是:"+context.operate(1,2));

        context.setOperation(new SubtractOperation());
        System.out.println("1-2的结果是:"+context.operate(1,2));
    }
1+2的结果是:3
1-2的结果是:-1

Android源码中的策略模式

在使用属性动画时,我们会通过设置不同的差值器,如AccelerateInterpolator、LinearInterpolator等,达到加速、匀速或者减速的动画效果。具体可以查看属性动画源码浅析Android源码学习-属性动画源码浅析

上一篇下一篇

猜你喜欢

热点阅读