Static Factory Methods instead of Constructors 静态工厂方法代替构造函数

【优势】

1. 没有很多参数

2.不用每次都需要创建一个对象

3. 创建对象时可以返回一个对象

Service interface
在接口中定义一些方法,例如:get(), 在实现类具体实现,将抽象变成具体
public interface Service
{
  ...// Service-specific methods go here
}
Service provider interface
服务提供接口,服务提供存在多个,为了让程序变得更加灵活,每个服务提供都是不一样的,具体的实现也是有区别的,例如:手机数据提供商就有三个分别是: 移动、联通、电信, 它们最终都能实现上网,通讯功能,但是每个服务商具体实现是不一样,我们每个手机都有一个公共的SIM卡接口,插上任何三个服务提供商的SIM卡,都能实现通话,上网功能。
public interface Provider
{
  Service newService();
}
Noninstantiable class for service registration and access
服务注册、使用,使用Private定义的构造函数为了阻止创建实例,必须通过newInstance()方法获取它,先将服务提供先注册进来,列如:手机出厂时有注册的服务提供商,插上该服务商提供的SIM卡才能正常使用,如果该服务商没有注册,那么插上去就不能使用,不能完成上网,通话功能。
先将服务提供注册到常量Map集合中,创建实例时直接从Map集合中获取,要是没有找到服务提供商,就意味着先需要注册后才能正常使用,确保服务提供商在内存中只有一个实例。
newInstance(String name)通过规定好的名称就能拿到具体的服务提供,如果是中国移动的服务提供,“中国移动欢迎你”
Public class Services{
   private Services(){};//Prevents instantiation 
  //Maps service names to services
  private static final Map<String,Provider> providers = new ConcurrentHashMap<String,Provider>();
 //Provider registration API
 public static void registerProvider(String name,Provider p)){
  providers.put(name,p);
}
 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();
} 
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值