设计模式之策略模式
来源:互联网 发布:iapp免杀源码 编辑:程序博客网 时间:2024/06/08 11:24
首先我们来看下策略模式的类图(设计模式的类图代表着设计思想)
策略模式 : 策略模式定义了算法家族,分别封装起来,让它们直接之间可以相互替换,此模式让算法的变化独立于使用算法的客户.
Context上下文,用具体的方法来进行配置,维护一个Strategy对象的引用.
package sjms.strategy.study;public class Context { private Strategy strategy; public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void excute(){ strategy.algorithm(); }}package sjms.strategy.study;public abstract class Strategy { //算法 public abstract void algorithm();}package sjms.strategy.study;public class ContreteStrategyA extends Strategy { @Override public void algorithm() { // 具体算法 System.out.println("ContreteStrategyA实现"); }}package sjms.strategy.study;public class ContreteStrategyB extends Strategy { @Override public void algorithm() { // 具体算法 System.out.println("ContreteStrategyB实现"); }}package sjms.strategy.study;public class TestStrategy { public static void main(String[] args) { Context context = new Context(); context.setStrategy(new ContreteStrategyA()); context.excute(); }}
实际开发中如何决定是否要用策略模式呢?
1:许多相关的类有不同的行为,也就是说所有的算法都是完成相同的工作只是实现不同.
2:进行解耦(减少各个算法之间的耦合)
3:封装了变化,对客户隐藏了策略的实现.
下面我们来走进实际的应用中
像我们玩游戏的时候都会有一些活动,类似充值100的100个元宝,另外多赠送50个元宝之类的活动
package sjms.strategy.exercise;public class CashMoney { private RechargeMoney rechargeMoney; public void setRechargeMoney(RechargeMoney rechargeMoney) { this.rechargeMoney = rechargeMoney; } public void cash() { rechargeMoney.recharge(); }}public interface RechargeMoney { //充值Recharge void recharge();}package sjms.strategy.exercise;public class RechargeFifty implements RechargeMoney { @Override public void recharge() { System.out.println("充值50返70个元宝!"); }}package sjms.strategy.exercise;public class RechargeOneHundred implements RechargeMoney { @Override public void recharge() { System.out.println("充值一百返150个元宝!"); }}package sjms.strategy.exercise;public class TestRechage { public static void main(String[] args) { CashMoney cashMoney = new CashMoney(); RechargeMoney rechargeMoney = new RechargeOneHundred(); cashMoney.setRechargeMoney(rechargeMoney); cashMoney.cash(); }}
阅读全文
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- Linux安装,连接,删除FTP服务器(常用FTP命令)
- (水仙花数问题)假设100
- 结构体内存大小的求法(内存对齐)&&c++类大小同样适用
- ping 原理与ICMP协议
- Android逆向之旅---Android中锁屏密码算法解析以及破解方案
- 设计模式之策略模式
- 【codeforces 746A】Compote
- 可能是我唯一的一篇博客吧。。。
- 在1
- codevs 2924 数独挑战
- java基础杂记001
- 在《JavaScript DOM编程艺术》的一些笔记
- java实现存储过程并同时得到out与return的值
- memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用