`
hwy1782
  • 浏览: 153350 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《effective in java》 阅读笔记1 -创建和销毁对象

 
阅读更多

阅读总结。

 

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读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...

    effective java 读书笔记

    1. **产生和销毁对象** - Item1:静态工厂方法相比构造子,提供了更大的灵活性,例如可以返回对象的子类实例,或者在不改变API的情况下更改返回的对象类型。 - Item2:Builder模式适用于有大量构建参数的情况,它...

    Effective-Java读书笔记

    《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。

    java逻辑思维笔试题-effective-java-3rd-edition:有效的Java第3版注释

    创建和销毁对象 03 - 所有对象通用的方法 04 - 类和接口 05 - 泛型 06 - 枚举和注释 07 - Lambda 和流 08 - 方法 09 - 通用编程 10 - 例外 11 - 并发 12 - 序列化 第 2 章 - 创建和销毁对象 第 1 项 - 考虑静态工厂...

    effective-java.pdf

    标题《effective-java.pdf》表明本文档是关于Java编程语言的实践指南,而描述说明了这是一份根据...文档《effective-java.pdf》详细地探讨了静态工厂方法在设计和实现上的优势,强调了其在现代Java编程实践中的重要性。

    Effective-Java读书笔记(上)

    ### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...

    Effective Java第三版1

    ### 第二章 创建和销毁对象 1. **考虑用静态工厂方法替换构造器**:静态工厂方法比构造器更灵活,它们可以返回已存在或新创建的对象,还可以有选择性地返回子类的实例,且名称可以更具描述性。 2. **构建器(建造者...

    Effective-Java-2nd-Edition-(May-2008).zip_effective java

    1. **类和对象的设计原则**:书中强调了设计良好的API的重要性,包括接口的使用、类的封装、以及如何正确使用final关键字来防止意外修改。 2. **重写equals()和hashCode()**:Bloch建议当重写equals()方法时,也应...

    jonykchen#effective-java-3rd-chinese#82. 文档应包含线程安全属性1

    如果这些假设是错误的,生成的程序可能缺少足够的同步(详见 78 条)或过度的同步(详见 79 条)。无条件线程安全 — 该类的实例是可变的,但是该类具有足够的内

    TCP-IP Sockets in Java, Second Edition- Practical Guide for Prog

    - **《Effective Java Networking》**:提供实用建议和技术细节,帮助优化网络应用程序的性能。 通过《TCP/IP Sockets in Java, Second Edition - 实用编程指南》,读者不仅可以学到理论知识,还能通过实践加深理解...

    effectiveJava的笔记

    《Effective Java》是Java开发领域的经典著作,由Joshua Bloch编写,旨在提供一系列实用的编程准则和最佳实践。这本书的第三版包含了大量更新,涵盖了Java语言和平台的新发展,如Java 8和Java 9的新特性。以下是对...

    effective-java 配套代码

    配套代码`effective-java-examples-master`是书中示例代码的集合,用于直观地展示书中的各种编程技巧和原则。 在`effective-java-examples-master`中,你可以找到以下知识点: 1. **枚举(Enums)**: 书中强调了...

    Effective Enterprise Java

    《Effective Enterprise Java》是一本深度探讨企业级Java应用开发的经典著作。这本书主要针对J2EE(Java 2 Platform, Enterprise Edition)平台,旨在提供一系列实用的编程指导和最佳实践,帮助开发者编写出高效、...

    java翻牌源码-effective-java-3rd-chinese:有效的java-3rd-chinese

    effective-java-3rd-chinese 前51条:文章翻译来源地址: 现在全部章节已经更新完成 :提供更好的在线阅读版本 : 提供更快的访问速度 写在最前面 本 repo 从来没有授权过任何公众号进行发布转载,所有公众号的引流...

    effective-java-3rd-chinese

    effective-java-3rd-chinese前51条:文章翻译来源地址:about this repository本来以为只是个直接搬运的活,实际上不是。主要工作如下:改进排版,原有博文排版不太优秀,根据markdown 排版指北重新排版。内容修改,...

    《Effective Java》读书分享.pptx

    在 Java 中,创建和销毁对象是非常重要的。静态工厂方法可以代替构造器,提供了更多的灵活性和性能优势。静态工厂方法可以返回原类型的任何子类型,且可以将构建好的实例缓存起来,方便重复利用,不用每次调用都创建...

    effective enterprise java 中文版

    1. **设计原则与模式**:书中强调了面向对象设计的基本原则,如单一职责原则、开闭原则和依赖倒置原则。同时,探讨了在企业级Java应用中常见的设计模式,如工厂模式、策略模式和观察者模式,以及如何在EJB...

Global site tag (gtag.js) - Google Analytics