一、服务端代码
1.服务端实现
package com.xxx.core;
/**
* 类ServiceClass.java的实现描述:服务端
*
*/
public class Server {
private Service service; // 留给客户端实现的类
public void execute() {
System.out.println("invoke execute method start!");
if (service.isDecided()) {
service.boom();
}
System.out.println("invoke execute method end!");
}
public void setService(Service service) {
this.service = service;
}
}
2.服务端留给客户端定制的类
package com.xxx.core;
/**
* 类Service.java的实现描述:客户端需要实现的类
*
*/
public interface Service {
public boolean isDecided();
public void boom();
}
二、客户端代码
1.客户端定制的实现类
package com.xxx.core;
/**
* 类ServiceProxy.java的实现描述:客户端代理实现服务
*
*/
public class ServiceProxy implements Service {
public void boom() {
System.out.println("传说中的爆炸!");
}
@Override
public boolean isDecided() {
return true;
}
}
2.客户端调用类
package com.xxx.core;
/**
* 类InvokedClass.java的实现描述:客户端要实现接口
*
*/
public class Client {
public static void main(String[] args) {
ServiceProxy proxy = new ServiceProxy();// 1.客户端实现
Server server = new Server();
server.setService(proxy);
server.execute();// 2.服务端回调proxy实现
}
}
三、调用序列图
四、好处
客户端有一定的自由度,可以执行决定一些事情。