策略模式

2020-07-23  本文已影响0人  竖起大拇指

1.什么是策略模式

策略这个词应该怎么理解,打个比方,我们出门的时候回选择不同的出行方式,比如骑自行车,坐公交,坐火车,坐飞机等等,这些出行方式,每一种都是一个策略。

在策略模式中,定义了一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策略类。

策略模式的主要目的是将算法的定义与使用分开,也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装了一种实现算法,使用算法的环境类针对抽象策略类进行编程,符合“依赖倒转原则”。在出现新的算法时,只需要增加一个新的实现了抽象策略类的具体策略类即可。

2.示例图

image.png

我们来看一下策略模式中有那些角色:

3.典型代码

首先定义一个抽象策略类,典型代码如下:

public abstract class AbstractStrategy {
    public abstract void algorithm();
} 

封装每一种具体算法的类作为该抽象策略类的子类,典型代码如下:

public class ConcreteStrategyA extends AbstractStrategy {
    public void algorithm() {
        //todo
    }
}

public class ConcreteStrategyB extends AbstractStrategy {
    public void algorithm() {
        //todo
    }
}

在Context类与抽象策略类之间建立一个关联关系,典型代码如下:

public class Context {
    private AbstractStrategy strategy;

    public Context(AbstractStrategy strategy){
        this.strategy = strategy;
    }

    public void algorithm(){
        strategy.algorithm();
    }
}

客户端代码如下:

public class Client {
    public static void main(String[] args) {
        AbstractStrategy strategy = new ConcreteStrategyA();
        Context context = new Context(strategy);
        context.algorithm();
    }
}

4.使用场景

在以下情况下可以考虑使用策略模式:

5.优缺点

策略模式的主要优点如下:

缺点

策略模式的主要缺点如下:

6.Android源码中的应用

动画中的TimeInterpolator(时间插值器)
有几种不同的实现策略:

上一篇 下一篇

猜你喜欢

热点阅读