代理设计模式

    xiaoxiao2025-03-16  17

    代理模式

    生活场景

    在电商高速发展的今天,快递的数量十分庞大,甚至出现了快递代理行业,简单的说就是快递的主人没有时间收快递,会指定一个快递的代收点,然后有时间的时候再过去取,下面使用代码对这个场景进行简单的描述:

    package com.cloud.model1; public class Demo1 { public static void main(String[] args) { /*自己收快递的测试方式*/ GetExpress getExpress = new GetExpress(); getExpress.sureInfo(); getExpress.signName("张三"); /*代收快递的测试方式*/ ExpressAct getUser = new GetExpress(); ExpressAct getProxy = new ProxyExpress(getUser); getProxy.sureInfo(); getProxy.signName("李四"); } } /** * @ClassName: ExpressAct * @Description: 接收一个快递的动作接口:确认信息,签名 * @author 午_夜 * @date 2016-8-13 下午2:16:21 */ interface ExpressAct{ public void sureInfo(); public void signName(String name); } /** * @ClassName: GetExpress * @Description: 定义一个类接收快递:自己去拿快递 * @author 午_夜 * @date 2016-8-13 下午2:18:40 */ class GetExpress implements ExpressAct{ @Override public void sureInfo() { System.out.println("请确认你的个人信息!"); } @Override public void signName(String name) { System.out.println("你的名字是:"+name); } } /** * @ClassName: ProxyExpress * @Description: 定义一个类接收快递:找人代领快递 * @author 午_夜 * @date 2016-8-13 下午2:27:38 */ class ProxyExpress implements ExpressAct{ private ExpressAct expressAct=null; public ProxyExpress(ExpressAct expressAct){ this.expressAct = expressAct; } @Override public void sureInfo() { this.expressAct.sureInfo(); } @Override public void signName(String name) { this.expressAct.signName(name); } }

    代理设计模式

    概念描述:

    代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。所谓代理,就是一个人或者机构代表另一个人或者机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

     

    图解:

    在代理模式中的角色:

    抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。

    目标对象角色:定义了代理对象所代表的目标对象。

    代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

    公共代码抽取

    package com.cloud.model1; public class Demo2 { public static void main(String[] args) { AbstractObject object = new ProxyObject(); object.operation(); } } /** * @ClassName: AbstractObject * @Description: 抽象对象角色 * @author 午_夜 * @date 2016-8-13 下午2:58:11 */ abstract class AbstractObject{ public abstract void operation(); } /** * @ClassName: RealObject * @Description: 目标对象角色 * @author 午_夜 * @date 2016-8-13 下午2:59:45 */ class RealObject extends AbstractObject{ @Override public void operation() { System.out.println("目标对象方法被执行..."); } } /** * @ClassName: ProxyObject * @Description: 代理对象角色 * @author 午_夜 * @date 2016-8-13 下午3:03:01 */ class ProxyObject extends AbstractObject{ RealObject realObject = new RealObject(); @Override public void operation() { System.out.println("操作之前..."); realObject.operation(); System.out.println("操作之后..."); } }

    应用分析

    1.真实角色只要实现好业务逻辑,不用关心其他事物

    2.具有很强的扩展性

    3.spring中AOP的设计就是典型的代理模式

    转载请注明原文地址: https://ju.6miu.com/read-1297099.html
    最新回复(0)