设计模式之策略模式
Strategy(策略模式)
一、策略模式简介
策略模式(Strategy Pattern),一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法
核心:
- 1、定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换
- 2、在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护
- 3、将这些算法封装成一个一个的类,任意地替换
二、策略模式优缺点比较
优点:
- 1、算法可以自由切换
- 2、避免使用多重条件判断
- 3、扩展性良好
缺点:
- 1、策略类会增多
- 2、所有策略类都需要对外暴露
使用场景:
- 1、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略
- 2、一个系统需要动态地在几种算法中选择一种
注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。
三、UML类图
三、设计实现
步骤1:创建策略接口
public interface Strategy { int doOperation(int num1,int num2); }
步骤2:创建实现策略接口的具体类
public class AddStrategy implements Strategy{ @Override public int doOperation(int num1,int num2) { return num1+num2; } } public class SubStrategy implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1- num2; } }
步骤3:创建上下文具体类
public class Context { private Map<String,Strategy> map = new HashMap<>(); public void addStrategy(String name,Strategy s) { map.put(name, s); } public int getResult(String name,int num1,int num2) { return map.get(name).doOperation(num1, num2); } }
步骤4:调用者测试
public class StrategyDemo { public static void main(String[] args) { Strategy s = new AddStrategy(); Strategy s1 = new SubStrategy(); Context c = new Context(); c.addStrategy("add", s); c.addStrategy("sub", s1); int result = c.getResult("add", 100, 20); System.out.println("100 + 20 = "+result); result = c.getResult("sub", 100, 20); System.out.println("100 - 20 = "+result); } }
步骤5:运行程序,观察结果
posted on 2020-04-08 22:21 VincentYew 阅读(155) 评论(0) 收藏 举报