各位在写业务代码的时候尤其是 详情页的时候, 会遇到很多状态比较复杂的场景, 这时候会涉及到大量的if-else的问题, 如果代码复杂起来之后会很难维护, 其实可以通过策略模式去解决这些问题, 代码如下:
首先创建一个接口:
/**
* 策略接口
*/
public interface AnimalStrategy {
void sleep();
void eat();
void sports();
}
但是各个动物其实有些 共同的行为 例如睡觉, 这时候需要创建一个抽象类 统一维护通用的行为.
/**
* 策略基类, 用来维护通用的行为
* @author live
*/
public abstract class BaseAnimalStrategy implements AnimalStrategy{
@Override
public void sleep() {
System.out.println("动物都是一种睡觉方式");
}
}
以下是具体策略:
public class ElephantAnimalStrategy extends BaseAnimalStrategy{
@Override
public void eat() {
System.out.println("食草的");
}
@Override
public void sports() {
System.out.println("散步");
}
}
public class TigerAnimalStrategy extends BaseAnimalStrategy {
@Override
public void eat() {
System.out.println("肉食主义者");
}
@Override
public void sports() {
System.out.println("捕猎就是运动");
}
}
为了方便调用以及维护, 我设计了一个枚举, 搭配工厂类统一使用:
/**
* 维护策略的枚举.
* @author live
*/
public enum AnimalEnum {
ELEPHANT(1, "com.sky.marshall.demo.strategy.ElephantAnimalStrategy"),
TIGER(2, "com.sky.marshall.demo.strategy.TigerAnimalStrategy"),
;
int index;
String className;
AnimalEnum(int index, String className) {
this.index = index;
this.className = className;
}
public int getIndex() {
return index;
}
public String getClassName() {
return className;
}
}
工厂类来创建实例:
public class AnimalFactory {
private AnimalFactory() {
}
public static AnimalStrategy newInstance(AnimalEnum animalEnum) throws Exception {
final Class<?> aClass = Class.forName(animalEnum.getClassName());
final AnimalStrategy animalStrategy = (AnimalStrategy) aClass.newInstance();
return animalStrategy;
}
}
注意: 以上其实可以用数据库代替枚举, 也可以用托管为spring的方式 注入bean来代替 反射创建实例, 看具体应用了.
接下来调用main函数测试:
/**
* 这里用的是反射获取到实例, 日常开发当然也可托管给spring 用注入bean的方式去获取 实例.
*
* @author Live
*/
public class Main {
public static void main(String[] args) throws Exception {
run(AnimalEnum.ELEPHANT);
run(AnimalEnum.TIGER);
}
private static void run(AnimalEnum animalEnum) throws Exception {
final AnimalStrategy animalStrategy = AnimalFactory.newInstance(animalEnum);
animalStrategy.eat();
animalStrategy.sleep();
animalStrategy.sports();
}
}
结果如下:
食草的
动物都是一种睡觉方式
散步
肉食主义者
动物都是一种睡觉方式
捕猎就是运动
以上就是简单的策略模式的应用.