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

    xiaoxiao2021-03-25  85

    方法有名字,可以知道构建的是什么样的一个对象;不必在每次调用的时候都创建一个新的对象,可以使用预先缓存好的对象,避免创建重复的对象–这样做的好处就是可以提升性能;可以有选择的返回子类型的对象。在静态工厂方法中使用范型可以使代码简洁,如下: public static <K,V> HashMap<K,V> newInstance(){ return new HashMap<K,V>(); } //using it,very simple HashMap<String,List<String>> m = HashMap.newInstance();

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

    组成:

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

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

    对于JDBC来讲:

    Connection就是服务接口(service interface)DriverManager.registerDriver是提供者注册APIDriverManager.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中提供的服务方法。

    转载请注明原文地址: https://ju.6miu.com/read-15009.html

    最新回复(0)