解决问题
将算法按照策略或场景封装起来, 以方便按照不同的场景执行不同的策略. 它很好的解决了通过 if...else 来决策行为而带来的代码和逻辑复杂性.
应用场景
一个经常被拿来举例的场景是收银员收银场景: 它需要根据不同的场景 (是否为会员, 有无促销等) 来决定计算方式, 如果使用 if..else 将使得代码复杂的无法维护, 这时我们就可以分场景来计算即可.
所以该策略的应用场景即为: 需要根据场景执行不同的策略(该策略应该具有一定的复杂性)
- Strategy
- public interface Strategy {
- public void show();
- }
- Concrete
- public class StrategyA implements Strategy {
- @Override
- public void show() {
- System.out.println("展示促销");
- }
- }
- public class StrategyB implements Strategy{
- @Override
- public void show() {
- System.out.println("展示广告");
- }
- }
- Context
- @AllArgsConstructor
- public class Context {
- private Strategy strategy;
- // 可能还有其它信息
- public void showPattern() {
- strategy.show();
- }
- }
- client
- public class Client {
- public static void main(String[] args) {
- String a = "a";// getStrategy from rpc
- Strategy strategy;
- if (a.equals("a")) {
- strategy = new StrategyA();
- } else {
- strategy = new StrategyB();
- }
- new Context(strategy).showPattern();
- }
- }
来源: https://juejin.im/post/5ae196486fb9a07a9f014037