美文网首页java
设计模式之代理

设计模式之代理

作者: 勃列日涅夫 | 来源:发表于2017-09-08 17:30 被阅读2次

    代理模式可就好比使用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());
        }
    
    }
    
    • nginx代理
    /**
     * 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事后处理部分<<<<
    

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

    相关文章

      网友评论

        本文标题:设计模式之代理

        本文链接:https://www.haomeiwen.com/subject/ptcnjxtx.html