我想为我的Java项目定义一个类层次结构。我的意图基本上是从电子邮件帐户中获取电子邮件,并根据网站使用IMAPPOP3将它们存储到数据库中(例如gmx支持IMAP和yahoo支持POP3)。我为此使用javamail API。假设我有两个名为IMAPPOP3的子类。对应的方法如下:

POP3


Execute_Parser
提取电子邮件
创建MSG摘要
Get_Foldername
扫描表
Store_Emailinfo


IMAP


提取电子邮件
创建MSG摘要
扫描表
Store_Emailinfo


如您所见,POP3需要实现2个额外的方法,而IMAP则不需要。两种方法的通用方法的实现都是相同的。谁能在这里建议我应该在基类中放置哪些方法?我猜这两个类都使用IMAP的所有方法。但是POP3的其他两种方法(Execute_Parser和Get_Foldername)又如何呢?

最佳答案

您可能要在基类中添加所有6个方法,并提供默认的空实现。在您的Pop3实现中,您将覆盖所有6个方法,而在Imap类中,仅覆盖您需要的4个方法。

现在,根据您的需要,您可能想添加其他方法来查询对象,是否需要调用Get_FoldernameExecute_Parser方法(例如boolean isUseParserRequired ())。如果我们假设您创建一个EmailProtocol抽象基类,并希望以通用方式使用它,则可能需要添加这样的帮助器方法。它将允许您在处理EmailProtocol实例时使用通用接口,而不必依赖if/else来确定您拥有哪种实例,然后调用适当的方法。

正如JB Nizet所提到的,您绝对应该坚持Java命名约定。

08-18 16:26
查看更多