先看看策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.)。
策略枚举模式是设计模式中策略模式(Strategy),在Java中借助Enum得以实现。对于策略模式,使用者需要知道目前所有的策略,即使只使用一种策略。为了解决此问题,策略枚举模式将各种的策略包装成枚举。如下代码:
package kevin.handler;
import java.util.List;
/**
*
* 对象断言处理器,使用策略枚举设计模式
*
* @author kevin.lee
* @since 2012-7-23 上午08:02:11
*
*/
public enum ObjectAssertHandler {
/** 非空断言器 */
NotNull {
@Override
public <T> T doAssert(T t, String desc) throws Exception {
if (t == null) {
throw new Exception(desc);
}
return t;
}
},
/** 非空List断言器 */
NotEmptyList {
@SuppressWarnings("rawtypes")
@Override
public <T> T doAssert(T t, String desc) throws Exception {
NotNull.doAssert(t, desc); // 先进行非空断言
if (t instanceof List) {
if (((List) t).isEmpty()) {
throw new Exception(desc);
}
} else {
throw new Exception("不是需要的java.util.List类型");
}
return t;
}
};
/**
* 对于对象进行断言
*
* @Description:
* @param <T>
* @param t 对象
* @param desc 描述信息
* @return
* @throws Exception
* @author kevin.lee
* @since:2012-7-23 上午08:10:44
*/
public abstract <T> T doAssert(T t, String desc) throws Exception;
}