我有一个事件层次结构,其中包含一些类型,即WelcomeEvent,LogOffEvent,BilledEvent等。我想为这些事件生成不同类型的电子邮件。我所做的是有一个抽象的电子邮件类,其类型为WelcomeEmail,LogoffEmail,BilledEmail。 我有一个EmailFactory,其中有以下方法:
Email getEmail(Event event) {
if(event.instanceOf(WelcomeEvent))
return new WelcomeEmail(event);
if(event.instanceOf(LogOffEvent))
return new LogoffEmail(event);
if(event.instanceOf(LogOffEvent))
return new BilledEmail(event);
}
我的评论员说应尽可能避免使用instanceOf。
有更好的方法吗?
答案 0 :(得分:0)
使getEmail
成为Event
子类的实例方法,在父类Event
中是抽象的。伪代码:
abstract class Event {
abstract Email getEmail();
}
class WelcomeEvent < Event {
Email getEmail() {
return new WelcomeEmail();
}
}
class LogOffEvent < Event {
Email getEmail() {
return new LogOffEmail();
}
}
然后,您只需在任何事件上调用event.getEmail()
即可获得与其子类相对应的新Email
。