设计模式-静态工厂之服务提供者框架


一、服务提供者框架组件

服务提供者有以下几个组件:

1、服务接口,这是提供者实现的;

2、提供者注册API,这是系统用来注册实现,让客户端访问;

3、服务访问API,这是客户端用来获取服务的实例;

4、服务提供者接口,这是提供者负责创建其服务实现的实例;

二、服务提供者框架简单实现


//服务接口
public Interface Service {
   public abstract serve();
}

//服务提供者接口
public Interface Provider {
	Service newService();
}


//Noninstantiable class for service registration and access
public class Services {
	private Services() {};
	//Maps service name to services
	private static final Map<String,Provider> providers = new ConcurrentHashMap<String,Provider>();
	public static final String DEFAULT_PROVIDER_NAME = "<def>";
	
	//Provider registration API
	public static void registerDefaultProvider(Provider p) {
		registerProvider(DEFAULT_PROVIDER_NAME,p);
	}
	public static void registerProvider(String name, Provider p) {
		providers.put(name,p);
	}
	
	//Service access 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();
	}
	
	
}

//服务提供者接口
public class EntityProvider implements Provider {

    static{ 
        ServiceManager.registerService("EntityService", new EntityProvider()); 
    }
    
    @override
    protect void newService() {
        return new ServiceImpl();
    }
    
    class ServiceImpl implements Service {
    
        @override
        protected void serve() {
            System.out.println("service that entity provided serve");
        }
        
    }

    
}

//测试
public class Test { 
  
    public static void main(String[] args) { 
         
		Service s = Services.newInstance("EntityService"); 
		s.serve(); 
        
    } 
	
} 





  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值