zoukankan      html  css  js  c++  java
  • Effective java读书札记第一条之 考虑用静态工厂方法取代构造器

    对于类而言,为了让client获取它自身的一个实例,最经常使用的方法就是提供一个共同拥有的构造器。

    另一种放你发,也应该子每一个程序猿的工具箱中占有一席之地。类能够提供一个共同拥有的静态 工厂方法。它仅仅是返回类的实例的静态方法。

    类能够通过静态工厂方法类提供它的client(对象),而不是通过构造器。提这样做的优点有:

    1.静态工厂方法与构造器不同的第一大优势在于。它们有名称.比方构造器BigInteger(int,int,Random)返回的BigInteger可能为素数,假设用名为BigInteger.probablePrime的静态工厂方法来表示,显然更为清楚。当一个类须要多个带有同样签名的构造器时,就用静态工厂方法取代构造器,而且谨慎地选择名称以便突出它们之间的差别。

    2.静态工厂方法与构造器不同的第二大优势在于,不必再每次调用它们的时候都创建一个新对象。这个详细不说了,能够看下单例模式。

    3.静态工厂方法与构造器不同的第三大优势在于。它们能够返回原返回类型的不论什么子类型的对象。这项技术适用于基于接口的框架。使用这样的静态方法时。甚至要求额client通过接口来引用被返回的对象。而不是通过它的实现类来引用被返回的对象,这是一种良好的习惯。

    4.静态工厂方法的第四大优势在于。在创建參数化类型的实例的时候,它们使代码变得更加简洁。

    缺点:

    静态工厂方法的主要缺点在于,类假设不含有共同拥有的或者受保护的构造器,就不能被子类化。

    静态工厂方法的第二个缺点在于,它们与其它的静态方法实际上没有不论什么差别。

    在API文档中,它们没有像构造器那样明白标识出来。因此,对于提供了静态工厂方法而不是构造器的类来说。要想查明怎样实例化一个类,这是很困难的。只是你通过在类或者接口凝视中关注静态工厂,并遵守标准的命名习惯,也能够弥补这一劣势。以下是一些惯用名称:

    valueOf 

    of

    getInstance

    newInstance

    getType

    newType

    简而言之。静态工厂方法和共同拥有构造器都各实用处,我们须要理解它们各自的唱出。

    静态工厂通常更加合适,因此切忌第一反应就是提供公有的构造器,而不先考虑静态工厂。

  • 相关阅读:
    一次向svn中增加所有新增文件 svn add all new files
    cocos2d-x Lua与OC互相调用
    IOS8开发之实现App消息推送
    IOS Remote Notification
    再见
    vue中$router.push打开新窗口
    nuxt拦截IE浏览器
    百度统计api获取数据
    css滚动条样式自定义
    nuxt框架Universal和Spa两种render mode的区别
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6726241.html
Copyright © 2011-2022 走看看