美文网首页
创建和销毁对象

创建和销毁对象

作者: badcyc | 来源:发表于2017-10-13 21:37 被阅读0次

考虑用静态工厂方法代替构造函数

静态工厂方法只是一个简单的静态方法,它返回的是类的一个实例

三个优点
  • 静态工厂方法与构造函数不同,静态工厂方法具有名字。

如果一个构造函数的参数并没有确切的描述被返回的对象,那么选用适当名字的静态工厂可以使用一个类更易于使用,并且相应的客户代码更易于阅读。

  • 它们每次被调用的时候,不要求非得创建一个新得对象。

1.这使得一些非可变类可以使用一个预先构造好的实例,或者把已经构造好的实例缓存起来,以后再把这些实例飞发给客户,从而避免创建不必要的重复对象。
2.静态工厂方法可以重复的调用返回同一个对象,这可以被用来控制"在某一时刻哪些实例应该存在".

  • 它们可以返回一个原返回类型的子类型的对象
两个缺点
  • 类如果不含有公有的或者受保护的构造函数,就不能被子类化。
  • 它们与其它静态方法没有任何区别

使用私有构造函数强化singleton属性

singleton类是指这样的类,他只能实例化一次。singleton通常被用来代表那些本质上具有唯一性的系统组件,比如视频显示或者文件系统。

  • 实现singleton有两种方法。这俩种方法都要把构造函数保持为私有的,并且提供一个静态成员,以便允许客户能够访问该类的唯一实例。
//Singleton with final field
public class Elvis{
pulic static final Elvis INSTANCE =new Elvis();
private Elvis(){
···
}
···//Remainder omitted剩余部分省略
}

私有构造函数仅被调用一次,用来被实例化公有的final域Elvis.INSTANCE。由于缺少公有的或者受保护的构造函数,所以保证了Elvis的全局唯一性:一旦Elvis类被实例化之后,只有一个Elis实例存在——不多也不少。

  • 提供一个公有的静态工厂方法,而不是公有的静态final域
public class Elvis{
private static final Elvis INSTANCE =new Elvis();
private Elvis(){
···
}
public static Elvis getInstance(){
return INSTANCE;
}
...//Remainder omitted
}

所有对于静态方法Elvis.getInstance的调用,都会返回同一个对象引用,所以,不会有别的Elvis实例被创建。

相关文章

  • EffectJava翻译系列(第一章:创建和销毁对象)

    1.创建和销毁对象 这个章节包含创建和销毁对象,什么时候和怎样创建,什么时候避免创建,如何确保对象在准确的时机销毁...

  • Effective Java Note (对象的创建和销毁)

    Effective Java Note (对象的创建和销毁) 一、对象的创建和销毁 1. 考虑使用静态工厂方法替代...

  • 优雅地创建和销毁对象

    创建和销毁对象概述 何时以及如何创建对象 何时以及如何避免创建对象 如何确保对象适时地销毁 如何管理对象销毁之前必...

  • 创建和销毁对象

    1、何时以及如何创建对象? 2、何时以及如何避免创建对象? 3、如何确保它们能够适时地销毁,以及如何管理对象销毁之...

  • 创建和销毁对象

    避免创建不必要的对象 重用不可变对象和已经的不会被修改的对象 考虑下面的语句String s=new String...

  • 创建和销毁对象

    考虑用静态工厂方法代替构造函数 静态工厂方法只是一个简单的静态方法,它返回的是类的一个实例 三个优点 静态工厂方法...

  • 创建和销毁对象

    学习目的: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保对象适时销毁 如何管理对象销毁前必须进行的各种...

  • 创建和销毁对象

    相比于构造函数,考虑使用静态工厂方法 如果自己写的类,希望客户端能创建它的实例,一般自己要提供哪些方式? 提供公有...

  • 创建和销毁对象

    什么是静态工厂方法 返回一个类的实例的静态方法 优势 不要用多态的方法创建构造器,可以选择不同命名的静态工厂方法来...

  • 创建和销毁对象

    第一条:考虑用静态工厂方法代替构造器。 第二条:遇到多个构造器参数时要考虑用构造器。 第三条:用私有构造器或者枚举...

网友评论

      本文标题:创建和销毁对象

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