首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2013-03-01 
《effective in java》 阅读笔记1 -创建和销毁对象package effective.java.chapter1import java.util.Mapi

《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方法。

?

?

?

热点排行