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

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

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

  • 相关阅读:
    odoo字段
    页签中加按钮 odoo里面
    页签类型按钮上面记录条数获得
    sql语句 这里是取一串数据中的 头 中 尾 几个数据
    python 字典,元组,对象,数组取值方法
    action类型的按钮和object按钮的用法
    数据结构与算法 基于c语言篇
    odoo开发历史订单需求整体思路
    spring框架的ioc和aop
    java注解和反射学习
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/6726241.html
Copyright © 2011-2022 走看看