设计模式之策略模式
来源:互联网 发布:淘宝上种草是什么意思 编辑:程序博客网 时间:2024/06/05 15:31
设计模式之策略模式
策略模式(Strategy): 它定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化, 不会影响到使用算法的客户。策略模式组成: 环境类(Context):用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Strategy访问它的数据。 抽象策略类(Strategy):定义所有支持的算法的公共接口。 Context使用这个接口来调用某ConcreteStrategy定义的算法。 具体策略类(ConcreteStrategy):以Strategy接口实现某具体算法。策略模式的实例:1.抽象策略类
package com.mzsds.strategy;public abstract class WaySuper { public abstract void getway();}
2.具体策略类 wayA:
package com.mzsds.strategy;public class WayA extends WaySuper{ public void getway() { System.out.println("我得到了wayA的方法。"); }}
wayB:
package com.mzsds.strategy;public class WayB extends WaySuper { public void getway() { System.out.println("我得到了wayB的方法。"); }}
wayC:
package com.mzsds.strategy;public class WayC extends WaySuper { public void getway() { System.out.println("我得到了wayC的方法。"); }}
3.环境类
package com.mzsds.strategy;public class StrategyContext { WaySuper waySuper; public StrategyContext(WaySuper waySuper){ this.waySuper = waySuper; } public void contextInterface() { waySuper.getway(); } }
4.测试
package com.mzsds.strategy; public class Client { public static void main(String[] args) { StrategyContext strategyContext; String way = "wayB"; switch (way) { case "wayA": strategyContext = new StrategyContext(new WayA()); break; case "wayB": strategyContext = new StrategyContext(new WayB()); break; case "wayC": strategyContext = new StrategyContext(new WayC()); } strategyContext.contextInterface(); }}
输出结果:我得到了wayB的方法。
·策略模式的优缺点:
优点:
1、可以动态的改变对象的行为
缺点:
1、客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2、策略模式将造成产生很多策略类
·我的理解:
策略模式是策略环境通过对象参数进行对象方法的调用(环境通过已经new的对象参数去调用其算法)
(客户端new出环境,传递对象,调用环境,环境得到对象,客户端可在环境中调用不同的对象方法)
(客户端和方法的分离)
阅读全文
0 0
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 设计模式之策略模式
- 工具类,各种保留小数点位数及特殊需求
- SSH无密码登录的配置
- 链表的简单知识
- 四、利用ssm进行登录和注册
- Intellij IDEA常用快捷键
- 设计模式之策略模式
- mac安装brew以及brew cask(二)
- 设计模式
- 27. Remove Element —— Java
- SORA使用
- C++11 自动释放锁
- myid文件缺失导致zookeeper无法启动(myid file is missing)
- 日期工具类DateUtils
- std::vector---swap