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.策略模式可以将具体策略放入具体的实现类中,公共方法则放入到父类中实现
策略模式缺点
如果策略过多的话,会导致类爆炸的现象发生
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


