前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之代理

设计模式之代理

作者头像
用户1418372
发布2018-09-13 10:23:05
3200
发布2018-09-13 10:23:05
举报
文章被收录于专栏:清晨我上码

代理模式可就好比使用nginx代理一样,不过这里所说正向代理。为方便描述,简单模拟为下面这种情况

代码语言:javascript
复制
浏览器 ----> nginx代理服务器(做一定的处理)  ----> tomcat服务器
  • 下面上代码更清楚的表示

  • 首先是客户端模型
代码语言:javascript
复制
/**
 * 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;
      }
}
  • 服务端接口模板
代码语言:javascript
复制
/**
 * 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
代码语言:javascript
复制
/**
 * 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());
    }

}
  • nginx代理
代码语言:javascript
复制
/**
 * 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事后处理部分<<<<");
    }
}
  • 最后简单测试下
代码语言:javascript
复制
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));
    }
}
  • 结果
代码语言:javascript
复制
>>>nginx事先处理部分<<<<
tomcat服务器处理的客户端是:火狐浏览器
>>>nginx事后处理部分<<<<

是不是发现还是很简单的,自己动手试试吧

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.09.08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代理模式可就好比使用nginx代理一样,不过这里所说正向代理。为方便描述,简单模拟为下面这种情况
  • 是不是发现还是很简单的,自己动手试试吧
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档