策略模式

2019-11-09  本文已影响0人  FredWhite

定义

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

使用场景

实现方式

背景:公司搞团拜会,有一个抽奖环节,现在拟定有3套方案供选择,具体哪一套会视情况而定
解决方案:策略模式。

Strategy(抽象类)

public abstract class LuckyDrawStrategy {
    public abstract void luckyDraw();
}

ConcreteStrategy(具体策略类)

传统抽奖

public class TraditionStrategy extends LuckyDrawStrategy {
    @Override
    public void luckyDraw() {
        System.out.println("采用传统(乒乓球)抽奖");
    }
}

软件抽奖

public class SoftwareStrategy extends LuckyDrawStrategy {
    @Override
    public void luckyDraw() {
        System.out.println("采用抽奖软件抽奖");
    }
}

钉钉抽奖

public class DingDingStrategy extends LuckyDrawStrategy {
    @Override
    public void luckyDraw() {
        System.out.println("采用钉钉签到抽奖");
    }
}

测试

public class StrategyTest {
    public static void main(String[] args) {
        private enum Strategy = {TRADITION, SOFTWARE, DINGDING};
        private LuckyDrawStrategy luckyDrawStrategy = null;
        switch(Strategy) {
            case Strategy.TRADITION:
                luckyDrawStrategy = new TraditionStrategy();
                break;
            case Strategy.SOFTWARE:
                luckyDrawStrategy = new SoftwareStrategy();
                break;
            case Strategy.DINGDING:
                luckyDrawStrategy = new DingDingStrategy();
                break;
        }
        luckyDrawStrategy.luckyDraw();
    }
}

优缺点

优点

缺点

注意

Android 源码中 Android 动画的 Interpolator(插值器) 所采用的的就是 策略模式。而 LinearInterpolator、CycleInterpolator 等插值器就是具体的实现策略。

上一篇 下一篇

猜你喜欢

热点阅读