阅读总结。
1.用静态工厂方法替代构造器
优点:
1.1 静态工厂方法有名称,比较好理解方法的含义。
1.2 静态工厂可以返回单例对象。
1.3 静态工厂方法可以返回任何父类型的子类型对象(比如下面的服务提供者框架中展示的)。
package effective.java.chapter1; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @author E-mail: hwy1782@gmail.com * @date : 2013-2-27 上午10:29:14 * */ public class Services { private static final Map<String,Provider> providers = new ConcurrentHashMap<String, Provider>(); private static final String DEFAULT_PROVIDER_NAME = "<def>"; public static void initProviders(String name,Provider provider){ providers.put(name, provider); } public static void initProviders(Provider p) { initProviders(DEFAULT_PROVIDER_NAME, p); } public static Service getServiceInstance(String name) { Provider p = providers.get(name); if(p == null){ throw new IllegalArgumentException("no provider register with name : "+name); } return p.provider(); } public static Service getServiceInstance(){ return providers.get(DEFAULT_PROVIDER_NAME).provider(); } }
package effective.java.chapter1; /** * @author E-mail: hwy1782@gmail.com * @date : 2013-2-27 上午10:28:46 * */ public interface Provider { Service provider(); }
package effective.java.chapter1; /** * @author E-mail: hwy1782@gmail.com * @date : 2013-2-27 上午10:28:20 * */ public interface Service { void service(); }
服务提供者框架中存在三个部分:
1.服务提供者(provider):注册服务,需要使用的服务在这个类里面注册。
2.服务接口(service):对外提供的服务,客户端调用这个接口就可以执行相应的服务。
3.服务访问api(services):客户端用来获取服务的实例。
1.4 创建参数化实例的时候,代码更简洁:
import com.google.common.collect.Maps; Map<String,String> maps = Maps.newHashMap();
2.构造函数中参数较多的时候,可以考虑使用build模式
package desigenPattern.factory; /** * @author E-mail: hwy1782@gmail.com * @date : 2013-2-21 上午10:35:53 * * Build 构造器模式 * * build 构造器模式: 使用内部静态类 * * 当类的构造器或者静态工厂中有多个参数,采用构造器模式不错 * */ public class Computer { private String name; private String type; private double screenSize; private String produceDate; private double price; public static class Build{ private String name; private String type; private double screenSize; private String produceDate; private double price; Build(String name,String type){ this.name = name; this.type = type; } public Build screenSize(double size) { this.screenSize = size; return this; } public Build produceDate(String date) { this.produceDate = date; return this; } public Build price(double price) { this.price = price; return this; } public Computer build(){ return new Computer(this); } } private Computer(Build build) { this.name = build.name; this.type = build.type; this.screenSize = build.screenSize; this.produceDate = build.produceDate; this.price = build.price; } @Override public String toString() { return "[computer name = "+name+" type = "+type+" screenSize = "+screenSize+" price "+ price+" produceDate "+produceDate+"]"; } }
3.使用私有构造器、或者枚举强化单例属性。
4.通过私有构造器,强化不能实例化能力。(比如一些工具类uitl就不需要实例化)
5.避免创建不必要的对象。(要优先使用基本类型而不是装箱基本类型,避免无意识的装箱)
6.消除过期引用:(一般而言只要类自己管理内存就要考虑这个问题)。
7.避免使用finalizer方法。
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
1. **产生和销毁对象** - Item1:静态工厂方法相比构造子,提供了更大的灵活性,例如可以返回对象的子类实例,或者在不改变API的情况下更改返回的对象类型。 - Item2:Builder模式适用于有大量构建参数的情况,它...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 12 - 序列化 第 2 章 - 创建和销毁对象 第 1 项 - 考虑静态工厂...
标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据...文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的优势,强调了其在现代Java编程实践中的重要性。
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
### 第二章 创建和销毁对象 1. **考虑用静态工厂方法替换构造器**:静态工厂方法比构造器更灵活,它们可以返回已存在或新创建的对象,还可以有选择性地返回子类的实例,且名称可以更具描述性。 2. **构建器(建造者...
1. **类和对象的设计原则**:书中强调了设计良好的API的重要性,包括接口的使用、类的封装、以及如何正确使用final关键字来防止意外修改。 2. **重写equals()和hashCode()**:Bloch建议当重写equals()方法时,也应...
如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或过度的同步(详见 79 条)。无条件线程安全 — 该类的实例是可变的,但是该类具有足够的内
- **《Effective Java Networking》**:提供实用建议和技术细节,帮助优化网络应用程序的性能。 通过《TCP/IP Sockets in Java, Second Edition - 实用编程指南》,读者不仅可以学到理论知识,还能通过实践加深理解...
《Effective Java》是Java开发领域的经典著作,由Joshua Bloch编写,旨在提供一系列实用的编程准则和最佳实践。这本书的第三版包含了大量更新,涵盖了Java语言和平台的新发展,如Java 8和Java 9的新特性。以下是对...
配套代码`effective-java-examples-master`是书中示例代码的集合,用于直观地展示书中的各种编程技巧和原则。 在`effective-java-examples-master`中,你可以找到以下知识点: 1. **枚举(Enums)**: 书中强调了...
《Effective Enterprise Java》是一本深度探讨企业级Java应用开发的经典著作。这本书主要针对J2EE(Java 2 Platform, Enterprise Edition)平台,旨在提供一系列实用的编程指导和最佳实践,帮助开发者编写出高效、...
effective-java-3rd-chinese 前51条:文章翻译来源地址: 现在全部章节已经更新完成 :提供更好的在线阅读版本 : 提供更快的访问速度 写在最前面 本 repo 从来没有授权过任何公众号进行发布转载,所有公众号的引流...
effective-java-3rd-chinese前51条:文章翻译来源地址:about this repository本来以为只是个直接搬运的活,实际上不是。主要工作如下:改进排版,原有博文排版不太优秀,根据markdown 排版指北重新排版。内容修改,...
在 Java 中,创建和销毁对象是非常重要的。静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建...
1. **设计原则与模式**:书中强调了面向对象设计的基本原则,如单一职责原则、开闭原则和依赖倒置原则。同时,探讨了在企业级Java应用中常见的设计模式,如工厂模式、策略模式和观察者模式,以及如何在EJB...