策略模式(Strategy Pattern)

2018-09-19  本文已影响0人  虎三呀

模式定义

定义一系列算法,将每个算法封装到具有公共接口的一系列策略类中,从而使它们可以相互替换 & 让算法可在不影响客户端的情况下发生变化

简单来说:准备一组算法 & 将每一个算法封装起来,让外部按需调用 & 使得互换

作用(解决的问题)

将算法的责任和本身进行解耦,使得:

1、算法可独立于使用外部而变化
2、客户端方便根据外部条件选择不同策略来解决不同问题

策略模式仅仅封装算法(包括添加 & 删除),但策略模式并不决定在何时使用何种算法,算法的选择由客户端来决定

UML类图

角色解析

Strategy :抽象方案
StrategyA 、StrategyB:具体方案
Context :方案执行者

实例讲解

使用场景:任何可以替换方案的场景,比如 做公交收费、商场促销活动方案、等等...

public abstract class Strategy {
      public abstract void operate();
}

public class StrategyA extends Strategy{
    @Override
    public void operate() {
        System.out.println("StrategyA - 算法");
    }

}

public class StrategyB extends Strategy{
    @Override
    public void operate() {
        System.out.println("StrategyB - 算法");
    }

}

public class Context {
    // 持有抽象策略角色的引用
    private Strategy strategy;

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
    public void operate() {
        strategy.operate();
    }
}

public class Client {
    public static void main(String[] args) {
        Context cxt = new Context();
        //A方案
        cxt.setStrategy(new StrategyA());
        cxt.operate();
        //B方案
        cxt.setStrategy(new StrategyB());
        cxt.operate();
    }
}

优缺点

在全面解析完后,我来分析下其优缺点:
优点

缺点

上一篇 下一篇

猜你喜欢

热点阅读