静态工厂方法代替构造器

来源:互联网 发布:关闭端口的命令 编辑:程序博客网 时间:2024/05/16 12:00

静态工厂方法的优势:

1它们有名称,表意更清楚。

2不必在每次调用它们的时候都创建一个新对象

3它们可以返回原返回类型的任何子类型的对象。

4在创建参数化类型实例的时候,它们是代码变得更加简单。

缺点:

1类如果不含有公有的或者受保护的构造器,就不能被子类化

2它们与其他的静态方法实际上没有任何区别,不方便辨认。


服务提供者框架简介:

服务提供者框架有三个重要的组件:服务接口,这是提供者实现的,供客户使用的,

提供者注册API,这是系统用来注册实现,让客户端访问他们的;服务访问API,是客户端用来获取服务的实例的。

例子:

public interface Service {    //some method}


public interface Provider {    Service newService();}

public class Services {    private Services() {    }    private static final Map<String, Provider> providers = new ConcurrentHashMap<>();    public static final String DEFAULT_PROVIDER_NAME="<def>";    public static void registerDefaultProvider(Provider p){        registerProvider(DEFAULT_PROVIDER_NAME,p);    }    public static void registerProvider(String name,Provider p){        providers.put(name,p);    }    public static Service newInstance(){        return newInstance(DEFAULT_PROVIDER_NAME);    }    public static Service newInstance(String name){        Provider p=providers.get(name);        if(p==null)            throw new IllegalArgumentException("No provider registered with name: "+name);        return p.newService();    }}