这里写目录标题
- 定义接口
- 定义抽象类
- 定义主处理器
- 分支处理器
- 定义工厂
- demo

定义接口
public interface EntityHandler extends InitializingBean {MatchContentDTO match(MatchEntityDTO matchEntityDTO);String supportEntityType();
}
定义抽象类
public abstract class AbstractEntityHandler implements EntityHandler {@Overridepublic final MatchContentDTO match(MatchEntityDTO matchEntityDTO) {EntityHandler specialMatchHandler = getSpecialMatchHandler(matchEntityDTO);if (specialMatchHandler != null) {return specialMatchHandler.match(matchEntityDTO);}return doCommonMatch(matchEntityDTO);}public abstract MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO);public EntityHandler getSpecialMatchHandler(MatchEntityDTO matchEntityDTO) {return null;}}
定义主处理器
@Service
@Slf4j
public class EntitySystemHandler extends AbstractEntityHandler {@Overridepublic MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO) {log.info("EntitySystemHandler:{}", JSON.toJSONString(matchEntityDTO));return new MatchContentDTO();}@Overridepublic String supportEntityType() {return this.getClass().getName();}@Overridepublic void afterPropertiesSet() throws Exception {EntityFactory.register(this);}@Overridepublic EntityHandler getSpecialMatchHandler(MatchEntityDTO matchEntityDTO) {return super.getSpecialMatchHandler(matchEntityDTO);}
}
分支处理器
@Service
@Slf4j
public class TimeEntityHandler extends AbstractEntityHandler {@Overridepublic String supportEntityType() {return this.getClass().getName();}@Overridepublic MatchContentDTO doCommonMatch(MatchEntityDTO matchEntityDTO) {log.info("TimeEntityHandler:{}", JSON.toJSONString(matchEntityDTO));return new MatchContentDTO();}@Overridepublic void afterPropertiesSet() throws Exception {EntityFactory.register(this);}
}
定义工厂
public class EntityFactory{private static final Map<String, EntityHandler> ENTITY_HANDLER_MAP = new HashMap<>();public static EntityHandler getEntityHandler(String entityType){return ENTITY_HANDLER_MAP.get(entityType);}public static void register(EntityHandler handler) {if (handler == null) {return;}ENTITY_HANDLER_MAP.put(handler.supportEntityType(), handler);}}
demo
@SpringBootTest
@RunWith(SpringRunner.class)
public class EntityTest {@Testpublic void getTest(){EntityHandler entityHandler = EntityFactory.getEntityHandler("system");MatchEntityDTO matchEntityDTO = new MatchEntityDTO();entityHandler.match(matchEntityDTO);}
}
