欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

代理模式(Proxy Pattern)

程序员文章站 2023-11-08 12:37:34
代理模式 一、什么是代理模式   代理模式(Proxy Pattern),指调用者通过调用代理对象来访问真实对象,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象。代理对象需要和真实对象建立代理关系。 二、代理模式的步骤 1. 代理对象和真实对象建立 ......

代理模式

一、什么是代理模式

  代理模式(proxy pattern),指调用者通过调用代理对象来访问真实对象,在真实对象访问之前或者之后加入对应的逻辑,或者根据其他规则控制是否使用真实对象。代理对象需要和真实对象建立代理关系。

二、代理模式的步骤

  1. 代理对象和真实对象建立代理关系
  2. 实现代理对象的代理逻辑方法

三、代理模式的优缺点

1、优点

  1. 职责清晰。
  2. 高扩展性。
  3. 智能化。

2、缺点

  1. 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
  2. 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

四、代码实现

代理模式(Proxy Pattern)

1、代理模式中的角色

  1. 抽象对象角色:声明了目标类及代理类对象的共同接口,这样在任何可以使用目标对象的地方都可以使用代理对象。
  2. 目标对象角色:定义了代理对象所代表的目标对象。
  3. 代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象和目标对象具有统一的接口,以便可以再任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或者之后,执行某些操作,而非单纯的将调用传递给目标对象。

2、具体代码实现

/**
 * 抽象对象
 *
 * @author zt1994 2019/3/2 16:25
 */
public interface sayhello {

    void sayhelloworld();
}
/**
 * 真实对象
 *
 * @author zt1994 2019/3/2 16:27
 */
public class sayhelloimpl implements sayhello {

    @override
    public void sayhelloworld() {
        system.out.println("hello world!");
    }
}
/**
 * 代理对象
 *
 * @author zt1994 2019/3/2 16:28
 */
public class sayhelloproxy implements sayhello {

    private sayhello sayhello;

    public sayhelloproxy(sayhello sayhello) {
        this.sayhello = sayhello;
    }

    @override
    public void sayhelloworld() {
        system.out.println("调用sayhello之前的处理");
        sayhello.sayhelloworld();
        system.out.println("调用sayhello之后的处理");
    }
}
/**
 * 测试静态代理
 *
 * @author zt1994 2019/3/2 16:30
 */
public class staticproxytest {

    /**
     * 测试静态代理
     */
    @test
    public void teststaticproxy() {
        sayhelloimpl sayhello = new sayhelloimpl();
        sayhello.sayhelloworld();

        sayhelloproxy sayhelloproxy = new sayhelloproxy(sayhello);
        sayhelloproxy.sayhelloworld();
    }
}

测试结果:
hello world!
调用sayhello之前的处理
hello world!
调用sayhello之后的处理

源码地址:https://github.com/zt19994/designpattern