`

(转)代理模式

阅读更多

转自:http://blog.csdn.net/io_field/article/details/52388085

 

概述

       代理模式(Proxy Pattern)也称为委托模式。代理模式在生活中经常见,比如访问国外网站时,连上代理服务器,就可以轻松畅游全世界的网络。既然代理模式这么普遍,我们有必要了解下代理模式如何做到的?

定义

       为其他对象提供一种代理以控制对这个对象的访问。

使用场景

       当无法或不想访问某个对象或访问某个对象困难的时,可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象要实现相同的接口。

UML类图

这里写图片描述 
角色介绍:

Subject:抽象主题类

该类的主要职责是声明真实主题与代理的共同接口方法,该类既可以是一个抽象类也可以是一个接口

RealSubject:真实主题类

该类也称为被委托活代理类,该类定义了代理所表示的真实对象,由其执行具体的业务逻辑方法,而客户端则通过代理类间接调用真实主题类的定义方法。

ProxySubject:代理类

该类也称为委托代理类,该类持有一个对真实主题类的引用,在其所实现的接口方法中调用真实主题类中相应的接口方法执行,以此起到代理作用。

Client:客户类,即使用代理类的实现。

示例代码

创建抽象主题类

public interface Subject {

    /**
     * 业务方法
     */
    void visit();
}

创建具体主题类

public class RealSubject implements Subject {

    /**
     * 业务实现
     */
    public void visit() {
        System.out.println("Real Subject");
    }

}

创建代理类

public class ProxySubject implements Subject{
    // 真实主题引用对象
    Subject mSubject;

    public ProxySubject(Subject subject) {
        this.mSubject = subject;
    }

    @Override
    public void visit() {
        // 通过具体主题类的引用对象调用真实主题的业务方法
        mSubject.visit();
    }
}

创建测试类

public class Test {
    public static void main(String[] args) {
        // 构造一个真实主题对象
        Subject subject = new RealSubject();
        // 通过真实主题对象创建一个代理对象
        ProxySubject proxySubject = new ProxySubject(subject);
        // 调用代理的相关业务方法
        proxySubject.visit();
    }
}

Log打印

Real Subject

 

分享到:
评论

相关推荐

    网闸代理模式配置.docx

    深信服网闸代理模式配置是一项关键的安全管理任务,它涉及到网络访问控制和数据传输的安全性。网闸,全称为“安全隔离与信息交换系统”,主要用于实现不同安全等级网络之间的安全隔离,同时满足数据交换的需求。以下...

    简单工厂模式、代理模式、策略模式如此相似

    在软件设计模式的世界里,"简单工厂模式"、"代理模式"和"策略模式"都是经典的设计模式,它们各自有着独特的应用场景和优缺点。本文将深入解析这三种模式的原理和区别,帮助读者理解它们在实际开发中的运用。 首先,...

    面向对象23种设计模式之代理模式

    代理模式是面向对象设计模式中的一个关键概念,它在软件工程中扮演着重要角色,用于在客户端和目标对象之间创建一种代理关系,以提供额外的功能或控制。在代理模式中,代理类作为真实对象的代表,它可以在客户端与...

    js策略模式和代理模式

    代理模式中的代理对象和目标对象实现相同的接口,客户端与代理对象进行交互,代理对象则根据具体情况决定是否将请求转给目标对象。在JavaScript中,代理模式可用于控制对象访问、惰性初始化、访问日志记录等。 ...

    java 动态代理模式 适配器模式

    Java动态代理模式与适配器模式是两种在软件设计中常用的设计模式,它们都有各自的优点和应用场景。在Java中,动态代理模式主要依赖于Java的反射API和InvocationHandler接口,而适配器模式则用于解决不同接口之间的...

    zeromq 代理模式的一些问题

    标题提到的“zeromq 代理模式的一些问题”主要涉及到zeromq在代理(Proxy)模式下的工作原理、常见问题以及解决方案。 在zeromq中,代理模式(Proxy)是一种核心架构,它允许消息在多个网络节点之间进行路由。代理...

    适配器模式,装饰模式和代理模式1

    适配器模式、装饰模式和代理模式 本文将详细介绍适配器模式、装饰模式和代理模式的概念、特点和应用场景,并通过实际的例子来阐述这三种模式的差异和相同点。 一、适配器模式 适配器模式是一种结构型设计模式,它...

    优秀的设计模式示例-动态代理模式

    动态代理模式是一种在运行时创建代理对象以控制或扩展原有对象行为的设计模式。它允许我们为现有的对象提供一种代理以增强其功能,而无需修改原对象的代码。动态代理模式通常用于实现对目标对象的额外操作,如日志...

    cmake 、代理模式与pimpl模式混用实例、std::move、std::forward()应用

    `代理模式`和`pimpl模式`是两种重要的设计模式,它们有助于提高代码的灵活性和封装性。`std::move`和`std::forward`是C++11引入的高效资源管理工具,用于提升性能,特别是处理移动语义和转发引用。现在,我们将详细...

    设计模式之代理模式Java实现和类设计图

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们在不修改原对象的情况下,通过代理对象来间接地对原对象进行控制。代理模式的核心思想是为一个对象提供一个代理,并由代理对象控制...

    设计模式:创建型之原型(深浅拷贝)、单例(饿汉式与懒汉式),三大工厂模式 结构型之适配器模式,代理模式(三大代理)

    代理模式则为另一个对象提供一种代理以控制对这个对象的访问,适用于延迟初始化、访问控制和远程对象访问等场景。 在描述中还提到了单例模式的两种实现方式:饿汉式和懒汉式。饿汉式在类加载时就完成了对象的初始化...

    适配器和代理模式详解

    代理模式(Proxy Pattern)是一种结构型设计模式,它提供了一个代理来控制对一个对象的访问。代理对象作为一个中间层,在客户端与目标对象之间起到中介的作用。 #### 二、代理模式解决的问题 代理模式主要用于解决...

    软件线下销售的具体策划方案.doc

    如果市场反应积极,可以考虑从分销模式转向代理模式,以更好地控制市场,加快公司资金回笼。 与分销渠道模式相关的工作包括提升产品影响力、确保价格体系的稳定、优化人员配置和管理、制定符合消费者喜好的促销计划...

    javaweb项目+设计模式(单例模式,工厂模式,动态代理,适配器)

    本项目涵盖了四种常见的设计模式:单例模式、工厂模式、动态代理和适配器模式。下面将详细阐述这四种设计模式的概念、作用以及在实际项目中的应用。 **1. 单例模式** 单例模式是一种限制类实例化次数为一个的设计...

    Java静态代理和动态代理

    Java中的代理模式是一种设计模式,它允许我们创建一个代理类,该类代表并增强另一个对象(委托类)的功能,而不改变原始对象的行为。代理模式在软件开发中常用于控制访问、增加额外功能或提供安全机制。 一、代理...

    设计模式之动态代理与spring的aop编程

    这个文件可能包含了关于动态代理模式的示例代码或进一步的解释。在学习和研究时,你可以打开这个文件,查看其中的Java代码,理解如何创建代理对象,以及如何实现InvocationHandler接口来定义代理逻辑。同时,你也...

    极度竞争时代的招商代理模式优化课件.pptx

    在极度竞争时代的招商代理模式优化过程中,理解和洞察代理商的心理至关重要。医药行业的形势分析显示,代理商在选择生产企业时,首要考虑的因素是产品品质、生产企业的声誉和规模,以及经销政策。其中,产品品质好且...

    静态代理与动态代理Demo

    在编程领域,代理模式是一种常用的设计模式,它允许我们在不修改原有对象的基础上,通过一个中介对象来增强或扩展原对象的功能。代理模式分为静态代理和动态代理两种主要形式,每种都有其特定的应用场景和优势。下面...

    23种设计模式-结构型模式.docx

    本文将深入探讨其中的两种结构型模式:适配器模式和代理模式。 1. 适配器模式 适配器模式是一种将两个不兼容的接口进行转换的模式,使得原本无法协同工作的类能够一起工作。它主要分为类适配器模式和对象适配器...

Global site tag (gtag.js) - Google Analytics