服务器定位模式(ServiceLocator)

设计模式之(六)【服务定位器模式】



设计模式之(六)【服务定位器模式】

标签: 设计模式 服务定位器模式

什么是服务定位器模式

顾名思义就是通过定位器获取到指定的服务类,这样就达到了解耦服务使用者和服务的作用了。

应用场景

一个人出生后,会登记他的身份信息(出生地、出生日期、性别等),当这个人到了该上学的年龄,教育部门可能就需要通知其参加义务
教育,当这个人到了一定的年龄需要服兵役了,国家则会通知他来服兵役……

类图和实现

类图:
服务定位器模式

代码:
服务接口Service:

public interface Service {
     public void execute();
}

服务缓存类:

public class ServiceCache {

    private Map<String,Service> cache=new HashMap<String,Service>();

    private static ServiceCache serviceCache;

    private ServiceCache(){};

    public void addService(String name,Service service){
        cache.put(name, service);
    }
    public void removeService(String name){
        if(cache.containsKey(name)){
            cache.remove(name);
        }
    }
    public Service getService(String name){
        return cache.get(name);
    }

    public static ServiceCache getInstance(){
        if(serviceCache==null){
            serviceCache=new ServiceCache();
        }
        return serviceCache;
    }

}

服务1Service1:

public class Service1 implements Service {

    public Service1(){
        ServiceCache.getInstance().addService(this.getClass().getName(), this);
    }

    @Override
    public void execute() {
        System.out.println("This is Service1");

    }
}

服务2Service2:

public class Service2 implements Service {

    public Service2(){
        ServiceCache.getInstance().addService(this.getClass().getName(), this);
    }
    @Override
    public void execute() {
        System.out.println("This is Service2");

    }

}

服务定位器ServiceLocator:

public class ServiceLocator {

    public Service getService(String name){
        return  ServiceCache.getInstance().getService(name);
    }
}

测试一下:

Service1 s1=new Service1();
        Service2 s2=new Service2();
        ServiceLocator locator=new ServiceLocator();
        Service service=   locator.getService("com.design.locator.Service2");
        service.execute();
        //输出This is Service2

转载地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值