美文网首页
策略模式

策略模式

作者: FredWhite | 来源:发表于2019-11-09 21:07 被阅读0次

    定义

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

    使用场景

    • 针对同一类问题的多种不同的处理方式,仅仅是具体行为有差别时。
    • 需要安全的封装多种同一类型的操作时。
    • 出现同一抽象类有多个子类,而又需要 if-else 或 switch-case 来选择具体子类时。

    实现方式

    背景:公司搞团拜会,有一个抽奖环节,现在拟定有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 等插值器就是具体的实现策略。

    相关文章

      网友评论

          本文标题:策略模式

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