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

设计模式之代理模式

作者: 老羊_肖恩 | 来源:发表于2017-06-07 22:40 被阅读5次

代理模式(Proxy Pattern)是一个使用率非常高的模式,其定义如下: Provide a surrogate or placeholder for another object to control access to it. 即:为其他对象提供一种代理以控制对这个对象的访问。
代理模式的通用类图如下图所示:

Proxy.jpg

  代理模式也叫做委托模式,它是一项基本设计技巧,许多模式,如状态模式,策略模式,访问者模式本质上都采用了委托模式。我们先看一下类图中三个角色的定义:

  • Subject 抽象业务类。抽象业务类可以是抽象类也可以是接口,是最普通的业务类型定义,无特殊要求。
  • RealSubject 具体业务类。也叫做具体被委托类或具体被代理类,是具体业务的执行者。
  • Proxy 代理类。也叫做委托类,负责对具体业务的调度,把所有抽象业务类定义的业务方法限制委托给具体业务类,并且在具体业务类的业务方法执行前后进行其他相关操作。
    接下来我们看一下代理模式的通用代码:
//抽象业务类
public interface Subject{
    //抽象业务方法
    public void  request();
}

//具体业务类1
public class RealSubject1 implements Subject{

    //实现业务方法
    @Override
    public void request() {
        System.out.println("RealSubject 1 业务逻辑处理...");
    }

}

//具体业务类2
public class RealSubject2 implements Subject{

    //实现业务方法
    @Override
    public void request() {
        System.out.println("RealSubject 2 业务逻辑处理...");
    }

}

public class Proxy implements Subject{
    //要代理的实现类
    private Subject subject = null;
    
    //默认被代理者
    public Proxy(){
        this.subject = new RealSubject1();
    }
    
    //通过构造函数传递代理者
    public Proxy(Subject subject) {
        this.subject = subject;
    }

    //实现处理方法
    @Override
    public void request() {
        this.before();
        this.subject.request();
        this.after();
    }

    //代理预处理
    private void before(){
        System.out.println("Proxy before...");
    }
    
    //代理后处理
    private void after(){
        System.out.println("Proxy after...");
    }
}

public class ProxyClient {
    public static void main(String[] args) {
        Proxy proxy1 = new Proxy();
        Proxy proxy2 = new Proxy(new RealSubject2());
        proxy1.request();
        System.out.println("---------------------");
        proxy2.request();
        
    }
}

通用代码的运行结果如下:

Proxy before...
RealSubject 1 业务逻辑处理...
Proxy after...
---------------------
Proxy before...
RealSubject 2 业务逻辑处理...
Proxy after...

一个代理类可以代理多个被委托者或被代理者,因此一个代理类具体代理那个具体业务类,是由场景决定的。当然,最简单的情况就是一个主题和一个代理类,这是最简洁的代理模式。通常情况下,一个接口只需要一个代理类就可以了,具体代理哪个类由高层决定,也就是代理类构造方法中传递的被代理者。

代理模式的应用

代理模式的优点

  • 职责清晰。具体业务类只需要完成实际的业务逻辑,而不用关心其他非本职的事务,通过后期的代理完成一件事务,附带的结果就是编程简介清晰。
  • 高扩展性。具体业务类随时都是可以变化的,只要它实现了抽象业务接口,代理类完全可以在不做任何修改的情况下使用。
  • 智能化。

代理模式的使用场景

代理模式的使用场景非常多,Spring AOP就是一个典型的动态代理。

《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。

相关文章

  • 设计模式之代理模式

    设计模式之代理模式 10分钟看懂动态代理设计模式(升级篇)-对这篇动态代理模式的思路整理 仿JDK实现动态代理逻辑...

  • 代理模式

    设计模式之代理模式 什么是代理模式? 指的事代理对象为其他对象提供代理以控制对被...

  • Java设计模式之代理模式

    Java设计模式之代理模式 代理模式 静态代理 动态代理 为什么需要代理 通过代理,我们能够不用知道委托人是谁,而...

  • Java代理模式之JDK动态代理

    了解什么是动态代理模式,可参考Java设计模式之代理模式 简介 JDK动态代理是java.lang.reflect...

  • 设计模式之代理模式2

    设计模式之代理模式运用 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对...

  • 设计模式之代理模式

    设计模式之代理模式 简介 代理模式是结构型设计模式。 当无法或不想直接访问某个对象或访问某个对象存在困难时可以通过...

  • 设计模式之代理模式

    title: 设计模式之代理模式date: 2018-08-15 20:25:42tags: 设计模式 笔记 Ja...

  • java设计模式之代理模式(静态代理)

      今天给大家分享的是java设计模式之代理模式中的静态代理模式,动态代理模式将在后面文章中给出。如有不足,敬请指...

  • Android 代理模式

    Android 设计模式系列文章 Android 23种设计模式 前言 代理模式可能是我们平时开发中最常见的模式之...

  • 设计模式之代理模式

    设计模式之代理模式 1.代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问. 2.代理模式的使用场景 当...

网友评论

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

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