代理模式可就好比使用nginx代理一样,不过这里所说正向代理。为方便描述,简单模拟为下面这种情况
浏览器 ----> nginx代理服务器(做一定的处理) ----> tomcat服务器
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
* @author xzg
* 2017年9月8日
* @ClassName: Brouser.java
* @Description: 客户端
* @version: v1.0.0
*/
public class Client {
private final String name ;
public Client(String name){
this.name = name;
}
@Override
public String toString() {
return name;
}
}
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
* @author xzg
* 2017年9月8日
* @ClassName: Server.java
* @Description: 服务端发送响应信息
* @version: v1.0.0
*/
public interface Server {
// 发送响应信息
void response(Client cli);
}
- 下面是具体的后端服务,分别表示tomcat和nginx
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
* @author xzg
* 2017年9月8日
* @ClassName: TomcatServer.java
* @Description: 具体的后端服务
* @version: v1.0.0
*/
public class TomcatServer implements Server {
@Override
public void response(Client client) {
// TODO Auto-generated method stub
System.out.println("tomcat服务器处理的客户端是:"+client.toString());
}
}
/**
* Copyright: Copyright (c) 2017 LanRu-Caifu
* @author xzg
* 2017年9月8日
* @ClassName: NginxServer.java
* @Description: nginx代理服务器处理
* @version: v1.0.0
*/
public class NginxServer implements Server {
// 这里是代理的真实服务器
private final Server server;
public NginxServer(Server server) {
this.server = server;
}
@Override
public void response(Client client) {
// TODO Auto-generated method stub
System.out.println(">>>nginx事先处理部分<<<<");
server.response(client);
System.out.println(">>>nginx事后处理部分<<<<");
}
}
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
Client cli = new Client("火狐浏览器");
//真实需要访问的服务端
TomcatServer tse = new TomcatServer();
//nginx代理处理任务
/*NginxServer ngi = new NginxServer(tse);
ngi.response(cli);*/
Consumer<Server> greeter = (s) -> s.response(cli);
greeter.accept(new NginxServer(tse));
}
}
>>>nginx事先处理部分<<<<
tomcat服务器处理的客户端是:火狐浏览器
>>>nginx事后处理部分<<<<
是不是发现还是很简单的,自己动手试试吧