在行为级别。把if
else
,switch
替换掉的最好方式。
策略类型的存放,有些人喜欢用static map
,我喜欢用Enum
,我感觉更优雅。
Enum
作为策略类型,实现类的beanId
直接写到Enum
中。今后的可扩展点就是新增或者删除实现类,并且对Enum
作调整。
这边的Enum
就相当于是配置了。
这边举一个简单的案例,比如要去上海旅游,有3中策略:跑去,开车,飞机。来看代码。
public enum TravelStrategyType {
RUN,// 跑去
DRIVE,// 开车
FLY// 飞机
;
}
再提供1个接口和3种策略的实现方式
public interface ITravelStrategy {
void go2shanghai();
}
public class RunTravelStrategy implements ITravelStrategy {
@Override
public void go2shanghai() {
System.out.println("run to shanghai");
}
}
public class DriveTravelStrategy implements ITravelStrategy {
@Override
public void go2shanghai() {
System.out.println("drive to shanghai");
}
}
public class FlyTravelStrategy implements ITravelStrategy {
@Override
public void go2shanghai() {
System.out.println("fly to shanghai");
}
}
再提供一个执行类
public class TravelDispatcher {
public void doTravel(TravelStrategyType type) {
ITravelStrategy strategy = null;
switch (type) {
case RUN:
strategy = new RunTravelStrategy();
case FLY:
strategy = new FlyTravelStrategy();
case DRIVE:
strategy = new DriveTravelStrategy();
}
strategy.go2shanghai();
}
}
看到上面有3种策略,在执行分发器中使用了switch
的方式来判断该用哪种策略,是否有更好的方式呢?有,需要巧妙的使用Enum
。参考文档 优雅代码 - 善用Enum
查看全部 浅谈模式 - 汇总篇