这里写目录标题
 - 定义接口
 - 定义抽象类
 - 定义主处理器
 - 分支处理器
 - 定义工厂
 - 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);}
}
 
