它看起來像你需要的「Chain of Responsibility」模式。 這個例子是在java中,但它的原理是一樣的。
爲每個角色創建一個抽象處理程序並實現一個子類。
抽象的處理程序:
class abstract Handler{
Handler succesor;
Role ROLE;
Handler(Handler succesor, Role role){
this.succesor = succesor;
this.ROLE = role
}
void sendMessage(Message msg, Role role){
if(role == ROLE){
this.handleMessage(msg);
} else if(succesor != null){
succesor.sendMessage(msg, role);
}
}
abstract void handleMessage(msg);
}
你做出比這樣的具體處理程序:
class RoleAHandler extends Handler{
RoleAHandler(Handler succesor){
super(succesor, RoleA);
}
@override
void handleMessage(msg){
// put handlecode here
}
}
,並用它喜歡:
// initialize
Handler handler = new RoleAHandler(null);
handler = new RoleBHandler(handler);
// usage
handler.sendMessage(new Message, RoleA);
你可以使盡可能多的角色,你想要
除了實現IMessageChannel的三個類之外,還需要創建一個具體類MultiChannel,它使用Composite模式,以便可以將多個MessageChannel放入類中並將它們視爲一個類。然後,您的工廠可以根據角色規則將電子郵件,短信和Twitter MessageChannel推送到MultiChannel中,並將其傳遞給正在使用的客戶端。 – Gordon