使用工厂模式与抽象类

时间:2017-11-06 21:58:49

标签: java design-patterns

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

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

对于我从服务器读取的每封电子邮件,我打电话给工厂(EmailParserFactory)以获取相应的电子邮件解析器
问题在于,工厂模式工厂依赖于一个通用接口(在经典的Java工厂模式中," Shape"是接口)
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()

1 个答案:

答案 0 :(得分:2)

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