建议一种基于特定事件获取特定电子邮件对象的方法

时间:2015-07-20 16:58:09

标签: oop design-patterns factory

我有一个事件层次结构,其中包含一些类型,即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。

  

有更好的方法吗?

1 个答案:

答案 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