美文网首页设计模式
设计模式之策略模式(Strategy)

设计模式之策略模式(Strategy)

作者: 从你说谎 | 来源:发表于2018-04-25 16:44 被阅读15次

1. 什么是策略模式?

策略模式 定义了算法族,分别封装起来, 让它们之间可以互相替换,此模式让算法的变化独立于使用算法的用户

策略模式包含三个角色:
1. Context(环境):持有一个Strategy的引用。
2. Strategy(抽象策略):这是一个抽象角色,通常由一个接口或抽象类实现。定义了具体策略类所需实现的算法。
3. ConcreteStrategy(具体策略):封装了具体的算法实现。

2. 策略模式用来干什么?

策略模式可以在运行时动态的改变算法,前提是用户需要知道所有的算法,然后进行选择。(用户只有选择权)

3. 怎么实现策略模式?

我们来用计算器来模拟一个策略模式的例子,不一定合适,主要就是那么个意思。

首先我们定义一个计算器的类(Context),它持有一个计算的操作接口(Strategy),具体的加减乘除操作由子类(ConcreteStrategy)实现。

package com.strategy;
//计算器
public class Calculator {

    private Calculation calculation;

    public Calculator(Calculation calculation) {
        this.calculation = calculation;
    }

    public Double execute(String numb1, String numb2) {
        return calculation.operation(Double.parseDouble(numb1), Double.parseDouble(numb2));
    }
}

package com.strategy;
//操作
public interface Calculation {

    Double operation(Double numb1, Double numb2);
}

package com.strategy;
//加法操作
public class Addition implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 + numb1;
    }
}

package com.strategy;
//减法操作
public class Subtraction implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 - numb2;
    }
}

package com.strategy;
//乘法操作
public class Multiplication implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 * numb2;
    }
}

package com.strategy;
//除法操作
public class Division implements Calculation {
    @Override
    public Double operation(Double numb1, Double numb2) {
        return numb1 / numb2;
    }
}
测试:

我们使用策略模式,封装了具体的算法,用户只用选择某种算法,而不需要知道具体的实现,而当需要新增或者修改算法时,也不会影响到原有的操作。

我们可以举几个具体的场景来理解,比如说,现在的支付方式(微信,支付宝,银行卡),用户只能在提供的几种支付方式中选择一种。
还有比如 以不同的格式保存文件、不同的算法压缩文件等等之类的都可以用策略模式来实现。

相关文章

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • 设计模式-策略模式

    设计模式-策略模式 定义 策略模式(Strategy Pattern)也叫政策模式(Policy Pattern)...

  • 设计模式[13]-策略模式-Strategy Pattern

    1.策略模式简介 策略模式(Strategy Patter)是行为型(Behavioral)设计模式,策略模式封装...

  • Java设计模式之策略模式

    Java设计模式之策略模式 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行...

  • iOS 设计模式-策略模式

    1.策略模式简介   策略模式(Strategy Pattern),是行为型模式之一(设计模式分类:https:/...

  • 设计模式之策略模式(Strategy)

    1. 什么是策略模式? 策略模式 定义了算法族,分别封装起来, 让它们之间可以互相替换,此模式让算法的变化独立于使...

  • 设计模式之策略模式(Strategy)

    概述 写代码时总会出很多的if…else,或者case。如果在一个条件语句中又包含了多个条件语句就会使得代码变得臃...

  • 设计模式之策略模式Strategy

    策略模式(Strategy Pattern) 一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模...

  • 设计模式之策略模式 - strategy

    典型的案例 在构造PriorityQueue优先级队列时,使用 给优先级队列指定一个元素的排序规则的比较器. 例如...

网友评论

    本文标题:设计模式之策略模式(Strategy)

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