美文网首页工作生活
设计模式学习-策略模式

设计模式学习-策略模式

作者: m1Ku | 来源:发表于2019-06-30 16:49 被阅读0次

    定义

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

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

    UML类图

    策略模式.png

    策略模式的角色

    • Context

      用来操作策略的上下文环境

    • Strategy

      策略的抽象

    • ConcreteStrategy

      策略的实现,实现具体的策略逻辑

    示例

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

    /**
     * 运算策略的抽象
     */
    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源码学习-属性动画源码浅析

    相关文章

      网友评论

        本文标题:设计模式学习-策略模式

        本文链接:https://www.haomeiwen.com/subject/huubcctx.html