【设计模式】—— 代理模式Proxy

简介:

  模式意图

  代理模式为其他的对象增加一个代理对象,进行访问控制。从而避免直接访问一个对象,造成效率或者安全性上的降低。

  应用场景

  1 远程代理,为一个远程对象,创建一个本地的代理对象。每次访问,直接访问本地代理对象即可。

  2 虚代理,如果对象很大,直接访问开销很大,可以为他创建一个代理对象,只生成关键的信息即可。

  3 保护代理,为某个对象增加一种保护机制,只有一定的权限才能通过这个代理,访问后面的对象。

  4 智能指针,有点像C++里面的那个智能指针,为指针进行计数和销毁等操作。避免出现悬垂指针等现象。

  模式结构

  Subject 类接口,定义代理类,实现类等的规范。

interface Subject{
    public void request();
}

  RealSubject 真正的对象

class RealSubject implements Subject{
    public void request() {
        System.out.println("ConcreteSubject request()");
    }
}

  ProxySubject 代理类,可以对真正的实现部分加上一种类似装饰的效果。看!多像AOP

复制代码
class ProxySubject implements Subject{
    private RealSubject subject;
    
    public void request() {
        preRequest();
        
        if(subject == null){
            subject = new RealSubject();
        }
        subject.request();
        
        postRequest();
    }
    
    public void preRequest(){
        System.out.println("ConcreteSubject preRequest()");
    }
    
    public void postRequest(){
        System.out.println("ConcreteSubject postRequest()");
    }
}
复制代码

  全部代码

复制代码
 1 package com.xingoo.Proxy;
 2 interface Subject{
 3     public void request();
 4 }
 5 class ProxySubject implements Subject{
 6     private RealSubject subject;
 7     
 8     public void request() {
 9         preRequest();
10         
11         if(subject == null){
12             subject = new RealSubject();
13         }
14         subject.request();
15         
16         postRequest();
17     }
18     
19     public void preRequest(){
20         System.out.println("ConcreteSubject preRequest()");
21     }
22     
23     public void postRequest(){
24         System.out.println("ConcreteSubject postRequest()");
25     }
26 }
27 class RealSubject implements Subject{
28     public void request() {
29         System.out.println("ConcreteSubject request()");
30     }
31 }
32 public class Client {
33     public static void main(String[] args) {
34         Subject subject = new ProxySubject();
35         subject.request();
36     }
37 }
复制代码

  运行结果

ConcreteSubject preRequest()
ConcreteSubject request()
ConcreteSubject postRequest()

 

本文转自博客园xingoo的博客,原文链接:【设计模式】—— 代理模式Proxy,如需转载请自行联系原博主。
相关文章
|
9小时前
|
设计模式 缓存 监控
【设计模式系列笔记】代理模式
代理模式是一种结构型设计模式,它允许一个对象(代理对象)控制另一个对象的访问。代理对象通常充当客户端和实际对象之间的中介,用于对实际对象的访问进行控制、监控或其他目的。
41 1
|
9小时前
|
设计模式 缓存 安全
小谈设计模式(8)—代理模式
小谈设计模式(8)—代理模式
|
9小时前
|
设计模式 JavaScript Java
设计模式——代理模式
一文讲清楚设计模式中的代理模式
25 0
设计模式——代理模式
|
9小时前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
24 2
|
9小时前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
9小时前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
|
9小时前
|
设计模式 Go 网络安全
[设计模式 Go实现] 结构型~代理模式
[设计模式 Go实现] 结构型~代理模式
|
9小时前
|
设计模式 缓存 Java
23种设计模式,代理模式的概念优缺点以及JAVA代码举例
4月更文挑战第7天】代理模式是一种常用的软件设计模式,它为其他对象提供一种代理以控制对这个对象的访问。这种模式创建具有原始对象相同接口的对象,从而使代理对象在访问者和目标对象之间作为一个中介。
16 0
|
9小时前
|
设计模式 uml
设计模式之代理模式
设计模式之代理模式
|
9小时前
|
设计模式 Arthas Java
【设计模式】代理模式
【设计模式】代理模式