2

我需要创建一个电子邮件通知服务(作为更大项目的一部分)。

它将用于发送基于 html 模板的几种类型的通知消息。

我可以通过两种方式设计它:

  1. 第一种方式是基于建造者模式。它是通用的(我认为)并且可以处理所有必要的情况。但是对于使用它的人来说不是很方便。典型用法如下所示:

    messageBuilder
       .put("name", "John Doe")
       .put("company", companyObj)
       .processPattern(pattern)
       .send(addresses, subject);
    
  2. 第二种方法是显式地实现所有情况。这意味着使用代码(如下所示)将尽可能简单,但每次我们需要处理任何新案例时,我们都必须修改 API(添加新方法)。

    messageSender.sendPersonExpenceNotification(addresses, "John Doe", company); 
    

哪一个更好?为什么?(如果重要的话,语言是 Java)

谢谢!

4

3 回答 3

2

我认为答案是两者都用。我建议在 API 中使用更通用的方法(消息生成器),然后提供易于用于特定任务的客户端便利函数/类。这样,当您添加新案例时,API 不必更新,但客户端仍然可以使用最直接的调用来执行他们尝试执行的操作。

于 2010-07-12T12:08:22.740 回答
0

Effective Java 第 2 版,第 2 项:在面对许多构造函数参数时考虑构建器

构建器模式更具可读性,尤其是当您可能有更多参数时。也就是说,通常更常见的是为构建器提供特定setName的 ,等方法。setCompany这样,您还可以强制执行类型安全,例如setSomeBoolean(boolean),setSomeInt(int)等。

构建器模式还允许您为某些参数设置默认值,并且用户可以方便地覆盖某些参数的默认值。提供模拟这种情况的方法涉及编写许多重载,这进一步加剧了问题。

相关问题

于 2010-07-12T12:04:59.573 回答
0

如今,最受青睐的设计模式依赖于“流利”的构建器。通过这种方式,您可以获得构建器的通用性,并具有易于理解的界面。

考虑到它只是选择好方法名称的问题,实现它是相当平凡的。

良好的现实世界示例都是FEST* 库

于 2010-07-12T12:07:38.920 回答