天天看點

認真學習設計模式之委派模式(Delegate Pattern)

委派模式不屬于GOF23種設計模式, 主要角色有三種: 抽象任務角色, 委派者角色, 具體任務角色。

委派模式具體是指定義一個抽象接口, 它有若幹實作類, 他們真正執行業務方法, 這些子類是具體任務角色。定義委派者角色也實作該接口, 但它負責在各個具體角色執行個體之間做出決策, 由它判斷并調用具體實作的方法。聯想到工作中就是leader将任務分派給小組長,小組長進行任務具體拆分到個人。

通常委派模式對外隐藏了具體實作, 僅将委派者角色暴露給外部。是不是立馬想到了外觀?如果委派者和具體的ConcreteTask也暴露出去可以嗎?

我們可以看下示意圖

認真學習設計模式之委派模式(Delegate Pattern)

也就是說Delegate與ConcreteTask是同一種類型,實作了同樣的方法。在委派者處理任務時,會将具體任務動作分派給ConcreteTask。

我們來看下一種變異的委派模式-mybatis中的CachingExecutor

如下所示,CachingExecutor 的構造方法中擁有delegate對象(這裡可以了解為執行工作任務的對象)。

public class CachingExecutor implements Executor {

 private final Executor delegate;
 private final TransactionalCacheManager tcm = new TransactionalCacheManager();

 public CachingExecutor(Executor delegate) {
   this.delegate = delegate;
   delegate.setExecutorWrapper(this);
 }
}      
@Override
public int update(MappedStatement ms, Object parameterObject) throws SQLException {
  flushCacheIfRequired(ms);
  return delegate.update(ms, parameterObject);
}      

繼續閱讀