这里写目录标题
定义接口 定义抽象类 定义主处理器 分支处理器 定义工厂 demo
定义接口
public interface EntityHandler extends InitializingBean {
MatchContentDTO match ( MatchEntityDTO matchEntityDTO) ;
String supportEntityType ( ) ;
}
定义抽象类
public abstract class AbstractEntityHandler implements EntityHandler {
@Override
public 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 {
@Override
public MatchContentDTO doCommonMatch ( MatchEntityDTO matchEntityDTO) {
log. info ( "EntitySystemHandler:{}" , JSON . toJSONString ( matchEntityDTO) ) ;
return new MatchContentDTO ( ) ;
}
@Override
public String supportEntityType ( ) {
return this . getClass ( ) . getName ( ) ;
}
@Override
public void afterPropertiesSet ( ) throws Exception {
EntityFactory . register ( this ) ;
}
@Override
public EntityHandler getSpecialMatchHandler ( MatchEntityDTO matchEntityDTO) {
return super . getSpecialMatchHandler ( matchEntityDTO) ;
}
}
分支处理器
@Service
@Slf4j
public class TimeEntityHandler extends AbstractEntityHandler {
@Override
public String supportEntityType ( ) {
return this . getClass ( ) . getName ( ) ;
}
@Override
public MatchContentDTO doCommonMatch ( MatchEntityDTO matchEntityDTO) {
log. info ( "TimeEntityHandler:{}" , JSON . toJSONString ( matchEntityDTO) ) ;
return new MatchContentDTO ( ) ;
}
@Override
public 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 {
@Test
public void getTest ( ) {
EntityHandler entityHandler = EntityFactory . getEntityHandler ( "system" ) ;
MatchEntityDTO matchEntityDTO = new MatchEntityDTO ( ) ;
entityHandler. match ( matchEntityDTO) ;
}
}