spring中策略模式使用

本文内容纲要:

- 策略模式

- 类图

- 代码示例

- 定义接口

- 接口实现

- 常量定义

- 策略类

- 接口调用

策略模式

工作中经常使用到策略模式+工厂模式,实现一个接口多种实现的灵活调用与后续代码的扩展性。在spring中使用策略模式更为简单,所有的bean均为spring容器管理,只需获取该接口的所有实现类即可。

下面以事件处理功能为例,接收到事件之后,根据事件类型调用不同的实现接口去处理。如需新增事件,只需扩展实现类即可,无需改动之前的代码。这样即做到了功能的隔离,又可防止改动原代码导致的bug。

类图

Image

代码示例

定义接口

public interface IBaseEventService {

/**

* 处理事件

* @param eventObject

* @return

* @throws Exception

*/

public boolean dealEvent(String eventObject);

/**

* 获取事件类型

* @return

*/

public String getType();

}

接口实现

@Service

public class AddUserEventServiceImpl implements IBaseEventService {

@Override

public boolean dealEvent(String eventObject) {

// TODO 业务处理逻辑

return false;

}

@Override

public String getType() {

return EventTypeEnum.ADD_USER_AFTER.getKey();

}

}

常量定义

public enum EventTypeEnum {

ADD_USER_AFTER("ADD_USER_AFTER"),

PLACE_ORDER_AFTER("PLACE_ORDER_AFTER");

private String key;

EventTypeEnum(String key) {

this.key = key;

}

public String getKey() {

return key;

}

public void setKey(String key) {

this.key = key;

}

}

策略类

@Service

public class EventStrategyService {

Map<String, IBaseEventService> eventServiceMap = new HashMap<>();

/**

* 构造函数

* @param eventServices spring容器中所有IBaseEventService的实现类

*/

public EventStrategyService(List<IBaseEventService> eventServices) {

for (IBaseEventService eventService : eventServices) {

eventServiceMap.put(eventService.getType(), eventService);

}

}

/**

* 根据事件类型调用不同的实现类处理

*/

public boolean dealEvent(String eventType, String eventObject) {

IBaseEventService eventService = eventServiceMap.get(eventType);

if (eventService == null){

throw new BizException("未找到事件处理实现类,eventType:" + eventType);

}

return eventService.dealEvent(eventObject);

}

}

接口调用

@Autowired

private EventStrategyService eventStrategyService;

//处理事件

eventStrategyService.dealEvent(eventType, userObject);

本文内容总结:策略模式,类图,代码示例,定义接口,接口实现,常量定义,策略类,接口调用,

原文链接:https://www.cnblogs.com/iiot/p/11332036.html

以上是 spring中策略模式使用 的全部内容, 来源链接: utcz.com/z/296530.html

回到顶部