《effective in java》 阅读笔记1 -创建和销毁对象
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;}@Overridepublic String toString() {return "[computer name = "+name+" type = "+type+" screenSize = "+screenSize+" price "+price+" produceDate "+produceDate+"]";}}
?
3.使用私有构造器、或者枚举强化单例属性。
?
4.通过私有构造器,强化不能实例化能力。(比如一些工具类uitl就不需要实例化)
?
5.避免创建不必要的对象。(要优先使用基本类型而不是装箱基本类型,避免无意识的装箱)
?
?
6.消除过期引用:(一般而言只要类自己管理内存就要考虑这个问题)。
?
7.避免使用finalizer方法。
?
?
?