BR 技术头条 技术链接、资讯与社区分享流
cn www.cnblogs.com / 2015-10-09 21:20 / by @Honoka_晴天

Effective Java 读书笔记(一):使用静态工厂方法代替构造器

赞过的人

@技术头条

讨论 · 1 条

@技术头条 2015-10-09 23:24

静态工厂方法的劣势
类如果不含公有的或受保护的构造器,就不能被实例化。

如果我们在类中将构造函数设为private,只提供静态工厂方法来构建对象,那么我们将不能通过继承扩展该类。
但是这也会鼓励我们使用复合而不是继承来扩展类。

它们与其他的静态方法实际上没有任何区别。

在API文档中,构建对象的静态工厂方法并没有像构造器那样明确标识出来,不能和其他静态方法很方便地区分开来。
如果类中只提供静态工厂方法而不是构造器,要想查明如何实例化一个类将会变得困难。
我们可以通过遵循静态工厂方法的命名规范来弥补这一劣势:

valueOf - 返回的实例与它的参数具有相同的值,一般作为类型转换使用,例如Boolean.valueOf(boolean)
of - valueOf的更为简洁的替代。
getInstance - 返回的实例通过方法的参数来描述,但不能说与参数具有同样的值。对于Singleton来说,使用无参getInstance,返回唯一的实例。
newInstance - 像getInstance一样,但其能够确保每次都返回新的对象。
getType - 像getInstance一样,但此方法返回的对象是另一个不同的类。
newType - 像getType一样,但每次返回一个新对象。
总而言之,静态工厂方法和公有构造器具有各自的用处,但静态工厂方法通常更加合适,所以我们应该优先考虑静态工厂方法。

发表评论