创建和销毁对象:
1.静态工厂方法:提供一个静态方法用于返回对应的实例。感觉就像简单的工厂。工厂可以持有一个集合,根据请求返回对应的对象。这种方法的缺点是:被创建的对象要提供可以让外部访问的构造函数(感觉不是非常大的缺点啊,出了单例不然提供构造函数不是挺正常的吗?),还有方法看起来和其他静态方法一样,不好识别是构造函数(写一个好的函数名可以解决吧)。
2.构建器Bulider:当类有很多属性,在构建的时候就会遇到麻烦,我们会需要根据不同的情况给某些属性初始值,这样就会造成构造函数必须有很多个进行重载,会形成很复杂不容易理解的情况。一种简单的方法是想javabean一样,提供一个无参的构造函数,然后为属性提供setter方法进行赋值。该种方法的缺点是整个构造过程被切分开了,如果在多线程的情况下,set属性的时候会遇到同步问题。解决方法是提供构建起Builder。代码如下:
public
class Product {
private final String type;
private final String size;
private final String owner;
public static class Bulider {
private final String owner;
private String type = "nothing";
private String size = "0";
public Bulider(String owner){
this.owner = owner;
}
public Bulider type(String type){
this.type = type;
return this;
}
public Bulider size(String size){
this.size = size;
return this;
}
public Product bulid(){
return new Product(this);
}
}
private Product(Bulider bulider){
this.type = bulider.type;
this.size = bulider.size;
this.owner = bulider.owner;
}
}
Product是我们所需要构建的产品,该类只有一个私有的构造函数,利用Bulider进行初始化,也就是说外部无法直接实例化它。要实例化它要通过内部类Bulider,Bulider的静态公有的,有三个属性,其中owner是必须初始化的,type和size是初始化可选的,Bulider利用提供的和属性同名的方法来对其赋值。最后提供bulid方法,调用Product类的构造函数返回一个实例化Product。客户采用Product
product = new
Product.Bulider("Jack").type("rocket").size("large”).bulid();来获得product,并且可以根据需要来初始化属性,可选择性的调用方法,顺序也没有要求,并且也很清楚的确定了设置了哪些属性和值。构建器的缺点是,要创建Product就必须先创建Bulider,带来了额外的开销。
3.强化Singleton属性:类仅仅提供一个static
final的对象并不能保证只有一个实例,客户端可以通过AccessibleObject.setAccessible修改反射的权限,来调用私有的构造器。可以在构造器中做个判断解决。如果可序列化的话,还要保证不能序列化出两个,要在类中加入private Object readResolve{retrun
Instance;}在类被反序列化的时候会调用该方法返回原来的实例。最简单的方法是实现只有一个单元素的枚举。
public
enum Singleton{
INSTANCE;
}
4.私有构造器实现不可实例化:这个没什么特别好说的,就是如果有类不想实例化的时候,编写一个私有的构造器,里面抛出异常即可。
5.尽量的重用对象:这个就要通过经验判断,什么对象可以重用,就将其重用就是了,比较经典的就是数据库连接。
6.取消过期引用,这个是大部分c,c++程序员都比较清楚明白的原因,防止内存泄露。
7.尽量不用终结方法,用的话就好考虑能被调用到。
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
java逻辑思维笔试题Effective Java - 第三版笔记 章节索引 02 - 创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 ...
以下是对《Effective Java》笔记中可能涉及的关键知识点的详细解读: 1. **单例模式**:书中强调了如何正确实现单例模式,推荐使用`enum`来创建线程安全且唯一的实例,避免传统双重检查锁定的潜在问题。 2. **构造...
读书笔记:Effective Java中文版第3版笔记
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
《Effective Java》是一本经典Java编程指南,作者是Joshua Bloch,这本书深入探讨了如何编写高质量、高效、可维护的Java代码。以下是对压缩包中各章节主要知识点的详细阐述: 1. **第2章 创建和销毁对象** - 单例...
读书笔记:读Effective Java中文版第3版阅读源码测试案列
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:Effective Java中文版学习项目
读书笔记:Effective Java中文版 第2版
读书笔记:Java练习包括《Java编程思想》《算法》《Effective Java》等
读书笔记:Effective Java中文版第二版示例代码
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:Effective.Java中文版(第3版)
除了课程内容,阅读官方文档、经典教材如《Head First Java》、《Effective Java》等,以及观看开源项目和在线教程,可以帮助巩固理论知识,提升实践能力。 总之,Java学习笔记旨在为初学者提供全面的学习路径,从...
java8集合源码有效的 Kotlin - 示例 免责声明:这个存储库包含我在阅读优秀书籍 Effective Kotlin 时收集的个人笔记和示例。 它绝不是本书的摘录或副本。 我鼓励所有 Kotlin 开发人员购买和阅读这本书。 第 1 部分:...