构造器和静态工厂方法

原创 2012年03月23日 19:19:20

     获取类的一个实例,最常用的两种方法就是创建构造器和静态工厂方法。

相对构造器,静态工厂方法的优势:

       (1)静态工厂方法有名称。同一个类的不同构造器只是在有无参数、参数长短和顺序的不同。而静态工厂方法可以根据用法自定义名称。

        (2)在创建参数化类型实例的时候,可以简化代码。

如Map<String , List<String>> m=new HashMap<String, List<String>>();   //构造器需要两次提供类型参数

Map<String , List<String>> m = HashMap.newInstance();  //静态工厂方法利用了类型推导,变压器替你找到参数类型

         (3)不必在每次调用静态工厂方法的时候都创建一个新的对象。

静态工厂方法能够为重复的调用返回相同的对象。  如果去报不会纯真两个相等的实例,即当且仅当a==b的时候才有a.equals(b)为true,那么可以利用a=b来代替a.equals(b)来提高性能。

          (4)静态工厂方法可以返回原返回类型的任何子类型的对象。

应用一:API可以返回对象,同时又不会使对象的类变成公有的。在基于接口的框架(如java collections framework)中,接口为静态工厂方法提供了自然返回类型,接口不能有静态方法,接口的静态工厂方法被放在一个不可实例化的类中。              客户端可以通过接口来引用被返回的对象,而不是通过它的实现类来引用被返回的对象。

应用二:静态工厂方法返回的对象所属的类,在编写保护盖静态工厂方法的类时可以不必存在。  这种灵活的静态工厂方法构成了服务提供者框架(服务提供者框架值得是多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把他们从多个实现中解耦出来。)。如JDBC。服务提供者框架:

     服务接口:这是提供者实现的。   如jdbc中的Connection

     提供者注册API:这是系统用来注册实现,让客户端访问他们的。   如DriverManager.registerDriver

     服务访问API:客户端用来获取服务的实例。           DriverManager.get.Connection

    服务提供者接口:这些提供者负责创建其服务实现的实例。   如Driver

相对构造器,静态工厂方法的缺点:

          (1)类如果不含有公有的或者受保护的构造器,就不能被子类化。对于公有的静态工厂方法所返回的非公有类,也同样如此。

            (2)与其他静态方法没有任何区别。静态工厂方法常用名称:  valueOf      getInstance    newInstance    getType  newType


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

第1条:考虑用静态工厂方法代替构造器

术语:

静态工厂方法与构造器

背景: 程序运行的时候,我们有时候为了获取某个类自身的一个实例,一共有两种途径。一种是通过构造器,一种是通过静态工厂方法。 什么是静态工厂:        http://blog.csdn.net...

Effective Java 中文版之学习 第1条:考虑用静态工厂方法代替构造器

对于类而言为了让客户端获取自身的一个实例,最常用的方法就是提供一个公有的构造器。还有一种方法就是,类可以提供一个公有的静态工厂方法(static factory method),它只是返回类的实例的静...

创建和销毁对象 - 考虑用静态工厂方法代替构造器

知识点: 1.静态工厂方法 2.静态工厂方法代替构造器的优势 3.静态工厂方法代替构造器的劣势 1.静态工厂方法   一个静态方法,这个方法不做别人事,只用来创建对象。 文中提到了工...

Effective Java 1:考虑使用静态工厂方法代替构造器

最近在看Effective Java,第一条是考虑使用静态工厂方法代替构造器。优点 静态工厂方法与构造方法不同的是它们有方法名称 不必每次调用它们的时候创建一个新的对象 它们的返回类型可以是任何子类型...

[Effective Java]考虑用静态工厂方法代替构造器

本文主要介绍如何使用静态工厂方法已经在那种场合来使用这种方式代替构造方法。 众所周知,对于类而言,我们为了获得一个类的实例对象,通常情况下会提供一个公有的(public) 的构造器。当...

1. 【创建与销毁对象】考虑用静态工厂方法代替构造器

本文是《Effective Java》的读书笔记。简要介绍了静态工厂方法的应用场景和优缺点,以便对这种技巧有更加全面的认识。

【effective java】考虑用静态工厂方法替代构造器

这里所说的静态工厂方法就是返回类型实例的静态方法。 那么为什么不使用构造器呢?用构造器方式构造实例不是我们一直约定好的吗? 嘿嘿 主要原因还是我们的构造器方法规定的太多限制了我们程序的灵活性: ...

01-考虑用静态工厂方法代替构造器

本文目录 简介 优势 缺点 服务提供者框架 简介如果想要获取一个类的实例,最常用的方法就是提供一个公有的构造器,除此之外,类还可以提供一个公有的静态工厂方法,它是一个返回类的实例的静态方法。下面是Ja...

01_考虑用静态工厂方法代替构造器

看到静态工厂方法,我首先想到的就是Java设计模式中的工厂模式,相信很多人都和我一样,但是在书中很明确的说明: 注意,静态工厂方法与设计模式中的工厂方法模式不同。本条目中所指的静态工厂方法并不直接...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)