• 代理模式


     
    代理模式
    • 何时使用:想在访问一个类时做一些控制。为其他对象提供一种代理以控制对这个对象的访问
    • 关键代码增加中间层(代理层),代理类与底层实现类实现共同接口,并创建底层实现类对象(底层实现类对象依赖注入代理类),以便向外界提供功能接口
    • 优点: 1、职责清晰。 2、高扩展性。 3、智能化。
    • 缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。3、会产生多余的代理类
    • 使用场景在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。
    • 注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。
     
     
    典型框架
    抽象对象角色
    1. public abstract classAbstractObject{
    2.     //操作
    3.     public abstract void operation();
    4. }
    目标对象角色
    1. publicclassRealObject extends AbstractObject{
    2.     @Override
    3.     publicvoid operation(){
    4.         //一些操作
    5.         System.out.println("一些操作");
    6.     }
    7. }
    代理对象角色
    1. publicclassProxyObject extends AbstractObject{
    2.     RealObject realObject =newRealObject();
    3.     @Override
    4.     publicvoid operation(){
    5.         //调用目标对象之前可以做相关操作
    6.         System.out.println("before");       
    7.         realObject.operation();       
    8.         //调用目标对象之后可以做相关操作
    9.         System.out.println("after");
    10.     }
    11. }
    客户端
    1. publicclassClient{
    2.     publicstaticvoid main(String[] args){
    3.         AbstractObject obj =newProxyObject();
    4.         obj.operation();
    5.     }
    6. }
    例子
    1. publicclassProxyImage implements Image{
    2.  
    3.    privateRealImage realImage;
    4.    privateString fileName;
    5.  
    6.    publicProxyImage(String fileName){
    7.       this.fileName = fileName;
    8.    }
    9.  
    10.    @Override
    11.    publicvoid display(){
    12.       if(realImage == null){
    13.          realImage =newRealImage(fileName);
    14.       }
    15.       realImage.display();
    16.    }
    17. }
     
     
    Android中代理模式在Binder中的使用
     
    一个例子:代理模式
     
     
     





  • 相关阅读:
    python中的内置函数的思维导图
    练习(面试题):关于生成器函数的求和问题
    推导式, 生成器表达式
    生成器
    静态代码块
    java中内存的划分
    静态方法
    Chapter07Scanner类、Random类、ArrayList类
    泛型
    对象数组
  • 原文地址:https://www.cnblogs.com/Doing-what-I-love/p/5621171.html
Copyright © 2020-2023  润新知