一、考虑用静态工厂方法来替代构造器
- 静态工厂与设计模式中的工厂方法模式不同
- 与构造器比第一大优势:他们有具体的名称,而不是类名
- 与构造器比第二大优势:不必在每次调用它的时候都创建一个新对象
- 与构造器比第三大优势:它可以返回原返回类型的任何子类型的对象
- 与构造器比第四大优势:在创建参数化实例时,可以使代码变得更加简洁
举例如下:
1 public static Boolean valueof(boolean a){ 2 return a?Boolean.TRUE:Boolean.FALSE; 3 }
二、服务提供者框架
- 服务接口:提供者实例
- 提供者注册API:系统用来注册实现,让客服端访问它们
- 服务访问API:客服端用来获取服务的实例,是一个灵活的静态工厂
举例如下:
1 public interface Service{ 2 //service-specific methods go here 3 } 4 5 public interface Provider{ 6 Service newService(); 7 } 8 9 public class Services{ 10 private Services(){} 11 12 private static final Map<String, Provider> providers=new ConcurrentHashMap<String, Provider>(); 13 public static final String DEFAULT_PROVIDER_NAME="<def>"; 14 15 //provider registration API 16 public static void registerDefaultProvider(Provider p){ 17 registerProvider(DEFAULT_PROVIDER_NAME, p); 18 } 19 public static void registerProvider(String name,Provider p){ 20 providers.put(name, p); 21 } 22 23 //service access API 24 public static Service newInstance(){ 25 return newInsance(DEFAULT_PROVIDER_NAME); 26 } 27 public static Service newInsance(String name){ 28 Provider provider= providers.get(name); 29 if(provider==null){ 30 throw new IllegalArgumentException("No provider registered with name:"+ name); 31 } 32 return provider.newService(); 33 } 34 } 35
三、Builder 模式
- 当遇到多个构造器参数时考虑使用构建器
- 与重叠构造器模式、JavaBean模式相比,既能保证像重叠构造器模式那样安全,又能保证JavaBeans模式那么好的可读性,而且也更易于扩展
时间: 2024-10-12 21:38:51