为什么JavaMail Session类没有构造函数?

时间:2012-12-17 16:29:08

标签: session constructor javamail

Session class没有构造函数,而是使用几个静态方法: getDefaultInstance(Properties p);

getDefaultInstance(属性p,身份验证者a);

getInstance(属性p);

getInstance(属性p,身份验证者a);

以上所有返回会话。

从设计的角度来看,是否要避免调用默认的无参数构造函数? 或者是否有其他类似的情况,你不能/不想使用构造函数?

2 个答案:

答案 0 :(得分:1)

静态工厂方法比构造函数有两个主要优点:

  1. 他们可以返回目标类的子类。
  2. 他们不必每次都创建一个新实例。
  3. 虽然JavaMail没有利用第一个(实际上Session是final),但它确实使用第二个为getDefaultInstance返回相同的Session对象。虽然这样做是为了支持特定的用例,但如同here所描述的那样,对很多人来说这是一个坏主意。

答案 1 :(得分:0)

您可以在What are static factory methods?获取一些信息。

如果是Session类,则可以更改仅将方法名称更改为getDefaultInstancegetInstance的行为。如果需要,请提供Authentificator。