问题
常见一个门面实现类,融合了N多的if/else,遂抽取了这种设计模式
类图
伪代码
//Facade
public void process(String key, Object...){ DataHandler handler = dataHandlerFactory.factory(key); if (handler != null) { try { handler.handle(memberId, obj); } catch (Exception e) { log.error("Handle auth data sync", e); } }
//DefaultHandlerFactory
public Handler factory(String key) { return handlerMap.get(key); } public void register(String key, Handler handler) { handlerMap.put(key(dataType, dataStatus), handler); }
\\AbstractHandler public void registerSelf() { dataHandlerFactory.register(key(), this); } /** * spring bean初始化后此方法被调用 */ @Override public void afterPropertiesSet() throws Exception { registerSelf(); } public abstract String key();