【设计模式】代理模式

设计模式总结链接


代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。


一。简解

代理模式顾名思义,通过第三方的代替完成某些功能。火车站代售处都听说过吧,它可以买票但是退票是不太好办的,也就是第三方可以有被代理对象的部分或者全部功能,也可以自己增加功能。
别小看这个代理模式哦,不信你看下面用途


二。用途

有句话怎么说:“菜鸟拿倚天剑当菜刀使,高手飞叶也伤人
代理模式十分强大,超级符合解耦的思想,很简单的就可以在原来类上定制自己的功能,比起继承简直有过之而无不及啊。
目前很流行的一种编程思想,面向切面编程面向过程编程、面向对象编程和面向切面理解)就是在代理模式基础上做的。


三。实例</font>

实例类图如下:
这里写图片描述


在代理模式中的角色:
- 抽象对象角色(AbstractObject):声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。
- 目标对象角色:(RealObject)定义了代理对象所代表的目标对象。
- 代理对象角色:(ProxyObject)代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。
很重要的一个解耦地方,需要使用真是对象的可以使用代理对象实现使用和实现的解耦

源代码
抽象对象角色

public abstract class AbstractObject {
    //操作
    public abstract void operation();
}

目标对象角色

public class RealObject extends AbstractObject {
    @Override
    public void operation() {
        //一些操作
        System.out.println("一些操作");
    }
}

代理对象角色

public class ProxyObject extends AbstractObject{
    RealObject realObject = new RealObject();
    @Override
    public void operation() {
        //调用目标对象之前可以做相关操作
        System.out.println("before");        
        realObject.operation();        
        //调用目标对象之后可以做相关操作
        System.out.println("after");
    }
}

客户端

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        AbstractObject obj = new ProxyObject();
        obj.operation();
    }

}

从上面的例子可以看出代理对象将客户端的调用委派给目标对象,在调用目标对象的方法之前跟之后都可以执行特定的操作。


四。优点

代理模式的有点太多了,简单的说几个:

  • 实现了对实现类的解耦
  • 使用可以不关心真是对象如何,只需要使用代理对象即可
  • 实现了对实现类的保护
  • 可以通过代理模式对实现类进行定制,裁减,扩展等
  • 总之代理了对实现类想咋玩咋玩嘿嘿

五。不足

不足之处,看使用环境吧,代理模式毕竟是间接访问实现类的,性能上有一点舍弃。
项目中视情况而定,需要经常修改的实现类可以使用代理,不能盲目使用,造成代码臃肿代理满天飞。



六。附加

代理从实现的角度分为动态代理和静态代理。此处使用的是静态代理,动态代理比较复杂下回分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鼠晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值