示例:
代码中多处调用同一服务:
package desigenpattern.serviceloactor;
/**
*
* @author zhongming.yuan
* @date 2014-5-20
*/
public class SmsComponent {
public static void send() {
System.out.println("Hi,how are you ?");
}
}
package desigenpattern.serviceloactor;
/**
*
* @author zhongming.yuan
* @date 2014-5-20
*/
public class SmsTest {
/**
* @param args
*/
public static void main(String[] args) {
// method send() could be invoke many times
SmsComponent.send();
SmsComponent.send();
SmsComponent.send();
}
}
使用服务定位器模式:
package desigenpattern.serviceloactor;
/**
*
* @author zhongming.yuan
* @date 2014-5-20
*/
public interface IService {
void send();
}
package desigenpattern.serviceloactor;
/**
* Service
* @author zhongming.yuan
* @date 2014-5-20
*/
public class SmsComponent2 implements IService {
@Override
public void send() {
System.out.println("Hi,how are you ?");
}
}
package desigenpattern.serviceloactor;
/**
* Locator
* @author zhongming.yuan
* @date 2014-5-20
*/
public class Locator {
private static IService service; // could be a list of service
public static void register(IService s) {
service = s;
}
public static IService getSmsService() {
return service;
}
}
package desigenpattern.serviceloactor;
/**
*
* @author zhongming.yuan
* @date 2014-5-20
*/
public class SmsTest2 {
/**
* @param args
*/
public static void main(String[] args) {
SmsComponent2 s = new SmsComponent2();
Locator.register(s); // register service at the beginning
IService service = Locator.getSmsService(); //use service
service.send();
}
}
服务定位器模式详细介绍参考: http://blog.csdn.net/iefreer/article/details/9342519