策略模式
2019-02-27 16:29 剑动情缥缈 阅读(179) 评论(0) 编辑 收藏 举报1.基本概念
- 定义一系列算法,将算法接口封装到具有算法接口的策略类中,从而使得可以改变算法
- 作用:将算法责任与策略类解耦,算法可以独立于策略类变化
- 策略类仅封装算法,使用何种算法由客户端决定
- UML
2.代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package com.chengjie; interface Strategy { void show(); } class StrategyA implements Strategy { @Override public void show() { System.out.println("促销活动A!"); } } class StrategyB implements Strategy { @Override public void show() { System.out.println("促销活动B!"); } } class StrategyC implements Strategy { @Override public void show() { System.out.println("促销活动C!"); } } enum NUM {A, B, C} class SalesMan { private Strategy strategy; public SalesMan(NUM num) { switch (num) { case A: strategy = new StrategyA(); break; case B: strategy = new StrategyB(); break; case C: strategy = new StrategyC(); break; default: strategy = null; } } public void salesManShow() { this.strategy.show(); } } public class TestStrategyPattern { public static void main(String[] args) { SalesMan sm = null; //活动A sm = new SalesMan(NUM.A); sm.salesManShow(); //活动B sm = new SalesMan(NUM.B); sm.salesManShow(); } }
3.优点
- 符合开闭原则:增加一个新的算法只需要添加一个算法类即可,不需要对策略类做任何修改
4.缺点
- 客户端需要知道所有算法,才可以选择使用哪个算法
5.应用场景
- 复杂的算法场景
- 变与不变分离:将变化的算法部分从类中独立出去
6.参考
https://www.jianshu.com/p/0c62bf587b9c