Effective Java---创建和销毁对象

创建和销毁对象对象


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

  • 优势

    1. 静态工厂方法与构造器不同的第一大优势在于,它们有名称。
    2. 静态工厂方法与构造器不同的第一大优势在于,不必在每次调用它们的时候都创建一个新的对象。
    3. 静态工厂方法与构造器不同的第一大优势在于,它们可以返回原返回类型的任何子类型的对象。
    4. 静态工厂方法与构造器不同的第一大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁。
  • 劣势

    1. 静态工厂方法的主要缺点在于,类如果不含公有的或者受保护的构造器,就不能被子类化。
    2. 静态工厂方法的第二个缺点在于,它们与其他的静态方法实际上没有任何区别。

    规范:

  • valueOf –不太严格的讲,该方法返回的实例与它的参数具有相同的值
  • of ———-valueOf的更简洁的替代。
  • getInstance———–返回的实例。对于Singleton来说,返回唯一实例。
  • newInstance———-像getInstance一样,但newInstance能够确保返回的每个实例都与所有其他实例不同。
  • getType————像getInstance一样,但是在工厂方法处于不同类中的时候使用。
  • newTpye————像newInstance一样,但是在方法工厂但是在工厂方法处于不同类中的时候使用。


    简而言之,静态工厂方法和共有构造器各有用处,我们需要理解它们各自的长处。静态工厂更加合适,我们首先第一反应就是考虑静态工厂。


    遇到多个构造器参数时要考虑用构建器

  • 重叠构造器:你提供第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个有两个可选参数,依次类推。(问题:参数多的时候代码编写很难)
  • JavaBeans模式:在这种模式下调用一个无参构造器来创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的可选参数。(问题:需要保证线程安全,或者构造过程的JavaBean可能处于不一致状态)
  • Builder模式:既能保证像重叠构造器那样的安全性,也能保证像JavaBean那样的可读性。这种方式不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器,得到一个builder对象。然后让客户端在builder对象上调用类似于setter的方法,来设置每个相关可选参数。

用私有构造器或者枚举类型强化Singleton属性
- 第一种方式:公有域为final域。
- 第二种方式:公有成员是个静态工厂方法。
- 单元素的枚举类型已经成为实现Singleton的最佳方案


通过私有构造强化不可实例化的能力
- 防止类被实例化
避免常见不必要的对象
- 一般来说,最好能重用对象而不是在每次需要的时候就创建一个相同功能的新对象。
消除过期的对象引用
1.防止内存泄漏
2.内存泄露的另一个常见的来源是缓存。
3.内存泄露的第三个来源是监听器和其他回调。
避免使用终结方法
1.终结方法(finalizer)是不可预测的。
2.不要被System.gc或System.runFinalization所迷惑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值