Java设计模式——结构型模式:代理模式

模式动机

在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户端和目标对象之间起到 中介的作用,并且可以通过代理对象去掉客户不能看到 的内容和服务或者添加客户需要的额外服务。

模式定义

给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。

模式结构

代理模式包含如下角色:

  • Subject: 抽象主题角色
  • Proxy: 代理主题角色
  • RealSubject: 真实主题角色

在这里插入图片描述

时序图

在这里插入图片描述

代码实现

//抽象主题对象
public interface Producer {
    
    
    void product();
}

//真实主题对象
public class RealProducer implements Producer{
    
    
    @Override
    public void product() {
    
    
        System.out.println("生产了一个苹果手机");
    }
}

//代理对象
public class ProducerProxy implements Producer{
    
    

    private Producer producer;

    public ProducerProxy(Producer producer){
    
    
        this.producer=producer;
    }

    @Override
    public void product() {
    
    
        System.out.println("运送来零件");
        producer.product();
        System.out.println("配送到专卖店");

    }
}

//客户端
public class Client {
    
    

    public static void main(String[] args) {
    
    
        Producer producer = new RealProducer();
        ProducerProxy personProxy = new ProducerProxy(producer);
        personProxy.product();
    }

}


模式优缺点

优点

  • 协调调用者和被调用者,在一定程度上降低了系统的耦合度
  • 虚拟代理,可以通过一个小对象来代表一个大对象,减少系统资源消耗。
  • 远程代理可以使客户端访问远程机器上的对象。
  • 保护代理可以控制对真实对象的使用权限。

缺点

  • 实现代理模式需要额外工作,有些代理模式的实现非常复杂。
  • 由于在客户端与真实对象间使用了代理对象,有些类型的代理模式可能会造成请求对象的处理速度变慢。

模式扩展

动态代理(挖坑,以后来填)

猜你喜欢

转载自blog.csdn.net/qq_35531985/article/details/109037714
今日推荐