我想为我的Java项目定义一个类层次结构。我的意图基本上是从电子邮件帐户中获取电子邮件,并根据网站使用IMAP
或POP3
将它们存储到数据库中(例如gmx支持IMAP
和yahoo支持POP3
)。我为此使用javamail API。假设我有两个名为IMAP
和POP3
的子类。对应的方法如下:
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_Foldername
和Execute_Parser
方法(例如boolean isUseParserRequired ()
)。如果我们假设您创建一个EmailProtocol
抽象基类,并希望以通用方式使用它,则可能需要添加这样的帮助器方法。它将允许您在处理EmailProtocol
实例时使用通用接口,而不必依赖if/else
来确定您拥有哪种实例,然后调用适当的方法。
正如JB Nizet所提到的,您绝对应该坚持Java命名约定。