Joshua Bloch建造者模式 - 关注线程安全时的好主意?

时间:2014-01-17 15:19:06

标签: java design-patterns user-interface thread-safety builder

我正在考虑使用Joshua Bloch描述的here描述的建造者模式。 我有一个显示Alert消息的类,将被许多应用程序使用。 它可以有大量不同的选项,如line1,btn txt,title,line2,timeout等。

我喜欢用setter链接对象构造的想法,但实际上应用程序必须在构造之后显示此警报。

由于创建的对象是不可变的,因此它们必须为不同的场景创建多个对象。 显示这些警报的所有调用都是异步的。

这种模式是一个好主意,还是更好的方法是在类中使用静态方法,保持无状态并在方法本身中获取所有参数。

3 个答案:

答案 0 :(得分:1)

使用构建器来实现这种实用方法似乎过于复杂。一系列具有apt过载签名的静态方法可以很好地完成。不是“噢,我的上帝,天空正在崩溃”的复杂性被授予,但大多数消费者可能会认为静态“更容易”。

当然,如果你发现自己需要4个重载(String,String,String),那么事情会发生变化我猜...

答案 1 :(得分:1)

在并发系统中使用构建器模式非常好。

关键决策因素是参数的数量,以及存在多少有效的排列。

答案 2 :(得分:1)

您链接的文章提及它。构建器模式的一个用例是创建复杂的不可变对象。你不想写一个巨大的构造函数,因为参数太多了。

虽然构建器是可变的并且具有像bean一样的setter - 因此不是线程安全的 - 所构建的结果对象是。没有可变状态的对象可以在任意多个线程中共享。没有什么可以修改它们,所以没有什么可以读取不一致的状态。

- >如果不跨线程共享构建器并且生成的对象是线程安全的,则是安全的。所产生对象的线程安全完全独立于您创建它的方式。

  

这种模式是一个好主意,还是更好的方法是在类中使用静态方法,保持无状态并在方法本身中获取所有参数。

取决于对象的创建有多复杂。无状态总是很好,但只有static方法,你会如何通过某种配置的警报?必须有某个地方可以显示它。