解决容器对组件的“侵入式”管理方法之一——服务定位器

接博客《对象管理器(容器)——面向对象系统设计的选择》

上一篇抛出问题:如何让一个组件查找另一个组件不依赖于容器本身?解决的方案之一就是使用服务定位器Service Locator)。服务定位器用来封装复杂的查找逻辑,同时对外开放简单的查找方法,所有组件都可以将查找请求委派给服务定位器。

服务定位器可是一个简单的类,也可以是一种复杂的机制,如JNDI。不同的容器有着不同的查找机制。

下面是一个简单的服务定位器:

package com.xs;

public class ServiceLocator {
	static{
		Container.init();
	}
	public static Object getDao(){
		return Container.getComponent("daoA");
	}
}
修改service的查找逻辑:
class ServiceImpl implements Service{
	private Dao dao = (Dao) ServiceLocator.getDao();
	public void serviceMethod() {
		dao.daoMethod();
	}
}
UML类图:

解决容器对组件的“侵入式”管理方法之一——服务定位器_第1张图片

原先由ServiceImpl到Container的依赖线上添加了ServiceLocator,组件不再直接依赖于容器,实现了“非侵入式”管理。

你可能感兴趣的:(解决容器对组件的“侵入式”管理方法之一——服务定位器)