美文网首页
用静态工厂方法代替构造器

用静态工厂方法代替构造器

作者: 境里婆娑 | 来源:发表于2019-05-26 14:44 被阅读0次

    优点

    1、静态工厂方法与构造器不同的第一大优势在于,它们有名称。如果构造器的参数本身没有确切地描述正被返回的对象,那么具有适当名称的静态工厂会更容易使用,产生的客户端代码也更易于阅读。例如,构造器Biginteger (int , int, Random )返回的Biginteger 可能为素数,如果用名为B 工ginteger.probablePrime 的静态工厂方法来表示,显然更为清楚。

    2、一个类只能有一个带有指定签名的构造器。编程人员通常知道如何避开这一限制: 通过提供两个构造器,它们的参数列表只在参数类型的顺序上有所不同。实际上这并不是个好主意。面对这样的AP I , 用户永远也记不住该用哪个构造器, 结果常常会调用错误的构造器。并且在读到使用了这些构造器的代码时,如果没有参考类的文档,往往不知所云。由于静态工厂方法有名称,所以它们不受上述限制。当一个类需要多个带有相同签名的构造器时,就用静态工厂方法代替构造器,并且仔细地选择名称以便突出静态工厂方法之间的区别。

    3、静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象

    4、静态工厂方法与构造器不同的第三大优势在子,它们可以返回原返回类型的任何子类型的对象

    5、静态工厂的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值

    6、静态工厂的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在

    缺点

    1、静态工厂方法的主要缺点在子,类如果不含公有的或者受protected的构造器,就不能被子类化

    2、静态工厂方法的第二个缺点在于,程序员很难发现它们

    from一一类型转换方法,它只有单个参数,返回该类型的一个相对应的实例,

    例如:Dated= Date . from(instant) ;

     of — —聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来,例如:

    Set<Rank> faceCards = EnumSet. of (JACK , QUEEN, KING];

     valueOf一一比from 和of 更烦琐的一种替代方法,例如:

    Biginteger prime = Biginteger.valueOf(Integer.MAX_VALUE);

    instance 或者get Instance一-返回的实例是通过方法的(如有)参数来描述

    的,但是不能说与参数具有同样的值,例如:

    StackWalker luke = StackWalker.getinstance(options);

    create 或者newInstance一一才象instance 或者getinstence 一样,但create

    或者newInstance 能够确保每次调用都返回一个新的实例,例如:

    Object newArray = Array.newInstance(classObject, arrayLen );

     getType一像getInstance 一样,但是在工厂方法处于不同的类中的时-候使用。Type 表示工厂方法所返回的对象类型,例如:

    FileStore fs = Files.getFileStore(path];

    D newType一象newInstance 一样,但是在工厂方法处于不同的类中的时候使用

    BufferedReader br 「= Files.newBufferedReader( path);

    相关文章

      网友评论

          本文标题:用静态工厂方法代替构造器

          本文链接:https://www.haomeiwen.com/subject/tawxtctx.html