策略模式介绍
策略模式是什么?
策略模式是依赖接口多实现的一种设计模式,通一接口的方法通过不同的实现方式呈现接口的多态。
策略模式中上下文对象,上下文对象封装了接口的具体实现,与一些逻辑,是提供服务与实际的服务底层逻辑相互分离。
结合springboot实现策略模式
1、创建公共接口类
2、构建类去实现这个公共接口,实现类可以有多个
3、构建上下文对象类,去封装实现的逻辑(可以通过注入的方式创建接口实现类)
4、使用服务层调用该策略模式
demo《锦郎妙计》
1、创建公共接口类
/**
* 公共接口类,代表锦郎妙计中的抽象妙计
*/
public interface ICommonService {
void genIdea();
}
2、构建类去实现这个公共接口,实现类可以有多个
/**
* 妙计1 见乔国老,并把刘备娶亲的事情搞得东吴人尽皆知
*/
@Component
public class IdeaOne implements ICommonService{
@Override
public void genIdea() {
System.out.println("见乔国老,并把刘备娶亲的事情搞得东吴人尽皆知");
}
}
/**
* 妙计2 用谎言(曹操打荆州)骗泡在温柔乡里的刘备回去
*/
@Component
public class IdeaTwo implements ICommonService{
@Override
public void genIdea() {
System.out.println("用谎言(曹操打荆州)骗泡在温柔乡里的刘备回去");
}
}
/**
* 妙计3 让孙夫人摆平东吴的追兵,她是孙权妹妹,东吴将领惧她三分
*/
@Component
public class IdeaThree implements ICommonService{
@Override
public void genIdea() {
System.out.println("让孙夫人摆平东吴的追兵,她是孙权妹妹,东吴将领惧她三分");
}
}
3、构建上下文对象类,去封装实现的逻辑(可以通过注入的方式创建接口实现类)
/**
* 上下文对象
*/
@Component
public class IdeaContext {
@Resource
private IdeaOne ideaOne;
@Resource
private IdeaTwo ideaTwo;
@Resource
private IdeaThree ideaThree;
private Map<String,ICommonService> strategies = new HashMap<>();
/**
* 提前注入
*/
@PostConstruct
public void initStrategy() {
strategies.put("妙计一",ideaOne);
strategies.put("妙计二",ideaTwo);
strategies.put("妙计三",ideaThree);
}
/**
* 上下文对象暴露给服务调用端接口,封装实现方式
* @param needIdea
*/
public void useIdea(String needIdea){
strategies.get(needIdea).genIdea();
}
}
4、使用服务层调用该策略模式
public class ServiceConsumer {
@Resource
private IdeaContext ideaContext;
public void test(){
//遇到危险,需调用锦郎1
ideaContext.useIdea("妙计一");
//遇到危险,需调用锦郎2
ideaContext.useIdea("妙计二");
//遇到危险,需调用锦郎3
ideaContext.useIdea("妙计三");
}
}