考虑用静态工厂方法代替构造器

来源:互联网 发布:java 计算两个时间戳 编辑:程序博客网 时间:2024/06/05 05:52
  1. 方法有名字,可以知道构建的是什么样的一个对象;
  2. 不必在每次调用的时候都创建一个新的对象,可以使用预先缓存好的对象,避免创建重复的对象–这样做的好处就是可以提升性能;
  3. 可以有选择的返回子类型的对象。
  4. 在静态工厂方法中使用范型可以使代码简洁,如下:
public static <K,V> HashMap<K,V> newInstance(){    return new HashMap<K,V>();}//using it,very simpleHashMap<String,List<String>> m = HashMap.newInstance(); 

服务提供者框架(service provider framework)

组成:

  1. 服务接口(service interface),提供者实现它,用来提供服务
  2. 提供者注册API(provider registration API)
  3. 服务访问者API(Service access API)
  4. 服务提供者接口(service provider Interface),这个是可选的,用来创建服务实现的实例,这块比较难懂,一会看代码。

以上的1,2,3看着像不像SOA?我感觉挺像的,其实SOA也好,RMI也好,都是一个思想。只不过是在运维过程中,需要加入不同的元素,使其可以更好的支撑业务。所以了解,J2EE中的基础结构,对于以后java工程中的各种模式,具有参考价值。

对于JDBC来讲:

  • Connection就是服务接口(service interface)
  • DriverManager.registerDriver是提供者注册API
  • DriverManager.getConnection是服务访问API
  • Driver就是服务提供者接口,负责创建connection实现的实例

    看下面的代码:

//Service provider framework sketch//服务接口public interface Service(){ ...//这里是具体的服务提供方法}//服务提供者接口public interface Provider{    Service newService();}//不可实例化的类,用于服务注册和访问public class Services {    private Services{};//阻止实例化    //映射服务名字到具体的服务    private static final Map<String,Provider> providers = new ConcurrentHashMap<String, Provider>();    public static final String DEFAULT_PROVIDER_NAME = "<def>";    //服务提供者注册API    //默认的注册方法    public static void registerDefaultProvider(Provider p){        registerProvider(DEFAULT_PROVIDER_NAME,p);    }    //真正的注册方法    public void registerProvider(String name, Provider p) {        providers.put(name, p);    }    //服务访问API    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();//真正的调用服务的接口方法    }}       

通过以上的代码可以看出来,编写了接口的框架,不需要具体的实现类,可以完成程序主架构的代码编写,这样的代码逻辑结构清析。

以上代码的核心就是如何创建Service,以使用service中提供的服务方法。

0 0
原创粉丝点击