一句话总结
我有选择恐惧症 你别让我一个一个挑 我给你说需求 你帮我挑好
选择恐惧症
- 选择恐惧症
选择恐惧症 说明了能选择的不止一个 (对应的策略不止一个)
每一个策略对应一个类
- 我给你说需求
这个地方我刚开始也不理解 刚开始学习的时候就知道需要那个策略直接NEW 就行了
我怎么知道该New 那一个 难道要if else 判断 如果是这样 那还用啥策略模式?
这个时候你会想到 就算 判断 是不是有个判断的依据 如 下图 这里的paymentType
不就是我要的需求吗 ?
我给你个paymentType 你给我个类不就行了
if ("支付宝".equals(paymentType)) {
} else if ("微信".equals(paymentType)) {
}
- 你帮我挑好
这里的你 该如何定义类?
上文提到的一对一的关系是不是想到了 map (还有人用枚举类)
如果你是spring的项目 也可以用applicationContext 获取不同的bean对象(下面会有案例)
这样一分析是不是策略模式的主要角色都出来了。
抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
具体策略(Concrete Strategy)类:(上文中的具体的选择)实现了抽象策略定义的接口,提供具体的算法实现。
环境(Context)类:(上文中的你)持有一个策略类的引用,最终给客户端调用。
类图

细心的小伙伴会发现 这和状态模式类图很像如下图
这不是像简直一摸一样 这里先不讨论他俩的区别 详细的看https://www.runoob.com/w3cnote/state-vs-strategy.html

策略模式之皇上选妃
抽象策略(Strategy)类
/**
* 抽象妃子类
*/
public interface ImperialConcubine {
void exhibition();//妃子展示才艺
}
具体策略(Concrete Strategy)类
/**
* 身材好的
*/
public class Figure implements ImperialConcubine {
private String name;
private String characteristic;
public Figure(String name, String characteristic) {
this.name = name;
this.characteristic = characteristic;
}
@Override
public void exhibition() {
System.out.println(this.name + "低头不见脚尖");
}
}
/**
* 将军家女儿
* 个之高 身材魁梧 会武功
*/
public class Hight
本文详细介绍了策略模式的概念,通过皇上选妃和支付场景的例子,解释了如何在Java和Spring项目中实现策略模式。文章指出,策略模式提供了一种管理算法族的方式,避免了多重条件选择语句,但可能会导致较多的具体策略类产生。
最低0.47元/天 解锁文章
8676

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



