JAVA策略模式简介说明
下文笔者讲述java策略模式的简介说明,如下所示
策略模式简介
策略模式是对象的行为模式 对象根据不同的策略对外表现出不同的行为 我们这种算法表现称之为"策略模式"
策略模式包含的内容
1.一个或多个使用策略对象的客户 2.一个代表某个逻辑的接口, 它是策略模式的接口. (抽象策略角色) 3.一个或多个该接口的具体实现, 它们代表了算法的多种实现.(具体策略角色)
策略模式的使用场景
1.容错恢复机制, 程序运行的时候 例: 一个系统要对所有的操作进行日志记录, 且需要把日志记录落库, 方便后续的使用, 但是在把日志记录落库的时候, 可能会发生错误, 如数据库出现问题, 那就先可以记录在文件里面, 等到数据库问题修复, 再把文件中的日志记录同步到数据库中去. 对于这样的功能设计, 可以采用策略设计模式, 根据需要在运行期间进行动态的切换实现类 2.不同的会员等级享受不同的折扣和计算方式 这种情况可定义不同的实现类,动态的根据级别切换实现类 等
策略模式示例
Client端代码 public class Client { public static void main(String[] args) { //根据需要客户自行选择策略 //选择策略1 StrategyObj strategyOne = new StrategyObj(new StrategyOne()); System.out.println(strategyOne.strategy("one")); //选择策略2 StrategyObj strategyTwo = new StrategyObj(new StrategyTwo()); System.out.println(strategyTwo.strategy("two")); } } ----运行以上代码,将输出以下信息----- 执行策略1! 执行策略2! /** * @desc:策略接口 */ public interface Strategy { String execute(String s); } /** * @desc:策略接口封装 */ public class StrategyObj { private final Strategy strategy; public StrategyObj(Strategy v) { this.strategy = v; } public String strategy(String s) { return strategy.execute(s); } } 策略模式实现类 /** * @desc:策略一 */ public class StrategyOne implements Strategy { @Override public String execute(String s) { return "执行策略1!"; } } /** * @desc:策略二 */ public class StrategyTwo implements Strategy { @Override public String execute(String s) { return "执行策略2!"; } } 5.使用Lambda表达式 public class Client { public static void main(String[] args) { StrategyObj strategyOne = new StrategyObj((String s) -> {return "执行策略1";}); System.out.println(strategyOne.strategy("one")); StrategyObj strategyTwo = new StrategyObj((String s) -> {return "执行策略2";}); System.out.println(strategyTwo.strategy("two")); } }
策略模式优缺点
策略模式优点 1.使用策略模式可以避免使用多重条件if...else if...else语句, 多重条件不易维护且代码可读性差 策略模式加工厂模式可以很好的解决 if else过多的情况 2.策略模式可以将具体策略放入具体的实现类中,公共方法则放入到父类中实现 策略模式缺点 如果策略过多的话,会导致类爆炸的现象发生
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。