gpt4 book ai didi

java - 将工厂模式与抽象类一起使用

转载 作者:行者123 更新时间:2023-12-02 02:30:45 24 4
gpt4 key购买 nike

我可以使用抽象类来编写工厂模式吗?

例如,我正在解析电子邮件,有多种类型的电子邮件,每种电子邮件类型都有自己的解析器类,所有解析器类都扩展了具有一些通用代码的主抽象解析器类。

对于我从服务器读取的每封电子邮件,我都会调用工厂 (EmailParserFactory) 来获取适当的电子邮件解析器
问题是,在工厂模式中,工厂依赖于一个通用接口(interface)(在经典的 Java 工厂模式中,“Shape”就是接口(interface))
Factory UML
在我的示例中,我在主解析器中维护一些通用逻辑,因此我需要它抽象类。

我不确定工厂模式是否是正确的方法。

我目前的设计如下:

EmailParser parser EmailParserFactory.getAppropriateEmailParser(email) ;
ParsedEmail = parser.getParsedEmail(email) -- parser is already the appropriate parser, sending it the email message will get back a parsed object.

对象:

     EmailParserFactory
private getEmailType(emailMessage) -- will check email type
- if email subject contains feedback its a feedback email
- if the email contains GUID then its a reply email etc

EmailParser - abstract class
getBodyText() - common for all

ComplaintEmailParser - specific parser for Complaint Email
parseEmail()
FeedbackEmailParser - specific parser for Feedback Email
parseEmail()
ReplyEmailParser - specific parser for Reply Email
parseEmail()

最佳答案

您可以使用组合而不是继承。事实上,您有与解析器无关的方法 getBodyText() 。因此,您可以将其提取到 BodyTextExtractor 并将该提取器注入(inject)到所有解析器中。重构之后,EmailParser 转换为具有一种方法 (SRP) 的接口(interface)。

关于java - 将工厂模式与抽象类一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47146552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com