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

2.1 施用静态工厂方法替代构造函数

2013-08-04 
2.1 使用静态工厂方法替代构造函数使用静态工厂方法(static factory method)优点:?1.与构造函数相比,静态

2.1 使用静态工厂方法替代构造函数

使用静态工厂方法(static factory method)优点:

?

1.与构造函数相比,静态工厂方法具有更有意义的名称

public Boolean(String string) {}//getBoolean()比new Boolean()名称上更有意义public static boolean getBoolean(String string) {}

?

2.静态工厂方法可以返回一个已创建的对象,而构造函数每次都会创建一个新对象。利用此方式可实现flyweight设计模式。

//每次调用返回的是已存在的对象    public static Boolean valueOf(boolean b) {     return b ? Boolean.TRUE : Boolean.FALSE; }

?

3.静态工厂方法可以返回一个子类对象,或接口实现类(面向接口编程)。

//以下为java.util.Collections的方法public static final <T> List<T> emptyList() {     return EMPTY_LIST;}

?

4.使用静态方法可以减少泛型编程代码的冗长度

//创建HashMap的代码过于冗长Map<String, List<String>> m =new HashMap<String, List<String>>();public static <K, V> HashMap<K, V> newInstance() {return new HashMap<K, V>();}//使用newInstance()更简洁Map<String, List<String>> m = HashMap.newInstance();

?

?

使用静态工厂方法的缺点:

?

1.如果被创建对象的类没有public/protected的构造函数,则不能被继承。但是可以使用composite设计模式进行封装,推荐后者

?

2.静态工厂方法可能与其他静态方法在名称上可能没有明显的区分,推荐使用以下名称作为静态工厂方法名称:

valueOf用于数据类型转换Boolean.valueOf()of同上,如EnumSet.of()getInstance一般用于获取单列对象newInstance创建新对象,每次调用返回一个新对象getType获取Type指定的对象,此方法用于工具类,如Collections类newType创建Type指定的对象,此方法用于工具类

?

?

?使用静态工厂方法,可以实现服务注册框架(类似JDBC)

//服务接口public interface Service{}//服务提供器public interface ServiceProvider{    Service newService();}//服务管理者,用于注册服务提供器,获取服务public class ServiceManager{    public static void registerService(String name,ServiceProvider provider){}        public static Service newService(String name){}}

?

?

?

?

?

?

?

热点排行