什么是策略模式
春节回家我们可以选择步行、骑行、火车、飞机、火箭等等方式;每个出行方式具体实现方式和体验都是有差异的,但是最终我们都可以到家。一句话:殊途同归。
有了这个例子,我相信你应该对其思想有了一个基本的认识,下面看一下其正式的概念介绍:
定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换
为什么要使用策略模式
举个简单的例子,春节回家我们可以选择步行、骑行、火车、飞机、火箭等等方式;每个出行方式具体实现方式和体验都是有差异的,那么之前我们的代码可能是这样:
public void goHome(int type) {
if (type == 1) {
System.out.println("步行回家...");
}
if (type == 2) {
System.out.println("高铁回家...");
}
if (type == 3) {
System.out.println("飞机回家...");
}
}
这种方式实现起来代码耦合度高,代码也略显臃肿;
反过来讲也就是实用策略模式的优点:
- 我们之前在选择出行方式的时候,往往会使用if-else语句,也就是用户不选择A那么就选择B这样的一种情况。这种情况耦合性太高了,而且代码臃肿,有了策略模式我们就可以避免这种现象,
- 策略模式遵循开闭原则,实现代码的解耦合。扩展新的方法时也比较方便,只需要继承策略接口就好了
策略模式简单应用
策略模式把对象本身和运算规则区分开来,因此我们整个模式也分为三个部分:
- 抽象策略类(Strategy):策略的抽象,出行方式的抽象;
- 具体策略类(ConcreteStrategy):具体的策略实现,每一种出行方式的具体实现;
- 具体应用入口类;
第一步: 定义抽象策略类
public interface TravelStrate