• 设计模式之代理模式


    代理模式:为另一个对象提供一个替身或占位符以访问这个对象

    代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。

    远程代理管理客户和远程对象之间的交互,虚拟代理控制访问实例化开销大的对象,保护

    代理基于调用者对象方法的访问,代理模式有许多变体,例如:缓存代理,同步代理,防

    火墙代理和写入时复制代理。代理在结构上类似装饰者,但是目的不同,装饰者是为对象

    加上行为,而代理则是控制访问。

    java内置的代理支持,可以根据需要建立动态代理,并将所有调用分配到所选的处理器。

    就和其他的包装者(wrapper)一样,代理会造成你的设计中的类的数目增加。

    举例:远程代理

    远程接口:

    import java.rmi.*;

    public inteface MyRemote extends Remotes{

      public String sayHello() throws RemoteException;//所有的远程方法都必须声明RemoteException

    }

    远程服务(实现)

    import java.rmi.*;

    import java.rmi.server.*;

    public inteface MyRemoteImpl extends UnicastRemoteObject implements MyRemote{

      public String sayHello() {

        return "server says,'Hey' ";

      }//不需要声明RemoteException

      public MyRemoteImpl() throws RemoteException{}//超类UnicastRemoteObject构造器申明了异常,所以你必须写一个构造器

      public static void main(String args[]){

        try{

          MyRemote service = new MyRemoteImpl();

          Naming.rebind("RemoteHello",service);//先产生远程对象,再使用Naming.rebind()绑定到rmiregistry,客户将使用你所注册的名称在rmiregistry中寻找它

        }catch(Exception ex){

          ex.printStackTrace();

        }

      }

    }

    客户端代码:

    import java.rmi.*;

    public class MyRemoteClient{

      public static void main(String args[]){

        new MyRemoteClient().go();

      }

      public void go(){

        try{

          MyRemote service = (MyRemote) Naming.lookup(rmi://127.0.0.1/RemoteHello);

          String s=service.sayHello();//看起来和一般的方式方法调用没有什么两样(除了必须注意RemoteException)

        }catch(Exception ex){

          ex.printStackTace();  

        }

      }

    }

  • 相关阅读:
    Java从指定目录下加载class文件
    超市问题
    SpringBoot中的thymeleaf布局
    SpringBoot 异步支持
    Groovy 脚本引发的 Old GC问题
    Java8 新特性笔记
    MySQL字段默认值踩坑记录
    SpringMVC接收Postman post json数据
    如何实现远程办公安全
    打印机打印的文档或图像出现白色横纹如何解决?
  • 原文地址:https://www.cnblogs.com/LvLoveYuForever/p/5803858.html
Copyright © 2020-2023  润新知