**介绍:**在策略模式中,我们会创建表示各种策略的对象,然后他们有相同的接口。还有一个行为会随着所关联的策略对象变化而变化的Context对象。
目的: 在多种算法相似的情况下,避免使用if…else去区别使用哪种算法。把这些算法都封装成一个一个的对象。使它们可以相互替换。

创建策略
//策略的抽象接口
interface Strategy {
//排序操作
void doOperate();
}
//三种策略的具体实现
class StrategyA implements Strategy{
//排序算法的具体实现:冒泡
public void doOperate() {
System.out.println("排序操作的:冒泡排序");
}
}
class StrategyB implements Strategy {
//排序算法具体实现:快速排序
public void doOperate() {
System.out.println("排序操作的:快速排序");
}
}
class StrategyC implements Strategy {
//排序算法具体实现:堆排序
public void doOperate() {
System.out.println("排序操作的:堆排序");
}
}
创建策略的运行环境
//运行特定的策略环境
class Context{
//内聚一个策略的抽象接口
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void invokeStrategy() {
strategy.doOperate();
}
}
public class StrategyPatten {
public static void main(String[] args) {
//创建一个策略:冒泡
Strategy strategy = new StrategyA();
Context context = new Context(strategy);
context.invokeStrategy();
}
}
适应场景
加入,要做一个日志记录功能,将数据写入数据库,但是日志的存储过程也可能会出现错误,所以 需要两种策略一种策略是直接存入数据库,另一种策略是如果数据库失败,存入文件。
本文深入探讨了策略模式的设计理念,通过创建一系列可互换的算法对象,避免了在代码中使用冗余的条件判断。介绍了策略模式的基本结构,包括策略接口、具体策略实现以及上下文环境。并通过一个具体的例子,展示了如何在不同算法间灵活切换。

4878

被折叠的 条评论
为什么被折叠?



