该模式比较简单,但相对一般策略模式更优雅,供大家参考。因为写法简单,就不过多赘述,大家还是直接看代码吧
1.抽象类
public abstract class AbstractStrategyComponent {
/**
* 苹果
*/
static final String APPLE = "APPLE";
/**
* 香蕉
*/
static final String BANANA = "BANANA";
/**
* 梨
*/
static final String PEAR = "PEAR";
private static Map<String, String> keyMap = new HashMap<String, String>(){
private static final long serialVersionUID = -3360025159043513865L;
{
put(APPLE, APPLE);
put(BANANA, BANANA);
put(PEAR, PEAR);
}
};
/**
* 行为
*/
public abstract void action();
}
2.具体实现
@Component(APPLE)
public class AppleStrategyComponent extends AbstractStrategyComponent {
@Override
public void action() {
System.out.println("吃苹果");
}
}
@Component(BANANA)
public class BananaStrategyComponent extends AbstractStrategyComponent {
@Override
public void action() {
System.out.println("吃香蕉");
}
}
@Component(PEAR)
public class PearStrategyComponent extends AbstractStrategyComponent {
@Override
public void action() {
System.out.println("吃梨");
}
}
3.使用方法
public class Test {
@Resource
private static Map<String, AbstractStrategyComponent> strategyMap;
public static void test() {
AbstractStrategyComponent abstractStrategyComponent = strategyMap.get(APPLE);
abstractStrategyComponent.action();
}
}
(这里注意,@Resource直接注入Map<String, AbstractStrategyComponent> strategyMap>,那么在注入时,会直接将AbstractStrategyComponent的子类全都以value的形式加载进来,并以子类的类名当做key,因此在使用时直接从map里get对应的子类类名即可获取实现类,十分方便)