设计模式——策略模式
来源:互联网 发布:英国知名网络品牌 编辑:程序博客网 时间:2024/06/03 21:55
个人理解:
1. 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
2. 策略模式是将对象的行为模式抽象为一个类,可以改变行为而不影响对象本身
3. UML图:
4. 包含部分:
环境(Context)角色:持有一个Strategy的引用。
抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
具体策略(ConcreteStrategy)角色:包装了相关的算法或行为。
5. 示例代码:
Strategy:
public interface Strategy { void travel();}
ConcreteStrategyA:
public class StrategyByBike implements Strategy { @Override public void travel() { Log.i("StrategyByBus","----------- travel By Bike -----------"); }}ConcreteStrategyB:
public class StrategyByBus implements Strategy { @Override public void travel() { Log.i("StrategyByBus","----------- travel By Bus -----------"); }}
ConcreteStrategyC:
public class StrategyByPlane implements Strategy { @Override public void travel() { Log.i("StrategyByBus","----------- travel By Plane -----------"); }}
Context:
public class StrategyKeep { private Strategy strategy; public StrategyKeep(Strategy strategy) { this.strategy = strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void travel(){ strategy.travel(); }}
客户端调用:
private void factoryStrategy(){ Strategy strategy = new StrategyByBike(); StrategyKeep keep = new StrategyKeep(strategy); keep.travel(); Log.i("factoryFlyweight", "****************换个方式****************\n"); Strategy strategy1 = new StrategyByBus(); keep.setStrategy(strategy1); keep.travel(); Log.i("factoryFlyweight", "****************再换个方式****************\n"); Strategy strategy2 = new StrategyByPlane(); keep.setStrategy(strategy2); keep.travel();}
运行结果:
12-20 15:20:07.943 9180-9180/com.wdp.designtest I/StrategyByBus: ----------- travel By Bike -----------
12-20 15:20:07.943 9180-9180/com.wdp.designtest I/factoryFlyweight: ****************换个方式****************
12-20 15:20:07.943 9180-9180/com.wdp.designtest I/StrategyByBus: ----------- travel By Bus -----------
12-20 15:20:07.943 9180-9180/com.wdp.designtest I/factoryFlyweight: ****************再换个方式****************
12-20 15:20:07.943 9180-9180/com.wdp.designtest I/StrategyByBus: ----------- travel By Plane -----------
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式—策略模式
- 设计模式——策略设计模式
- Java设计模式—策略
- 设计模式——策略模式
- 设计模式——策略模式
- 每日设计模式——策略模式
- 设计模式——策略、代理模式
- Linux下忘记root密码重置过程笔记
- java基础---(2)Java中token的使用详解
- 购物车
- listView自动加载
- 2017.12.20 MyBatis
- 设计模式——策略模式
- sql性能优化(利用merge)
- OC 中New和alloc/init的区别
- java 利用BufferedWriter 读写文件需要flush 缓存
- cookie 和session 的区别详解
- 信息系统安全等级保护申请流程
- spriing boot 启动报错:Cannot determine embedded database driver class for database type NONE
- 谁动了我的特征?——sklearn特征转换行为全记录
- 随机生成N位字段串