它看起来像你需要的“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