设计模式之代理模式

代理,顾名思义,就是有个中间人,网上看到别人举的例子,印象深刻,拿过来来分享,就是,你来北京租房,你怎么租?

第一反应,当然是找个中介啊,因为他手里有房源消息。从这个代理可获得,租房价钱信息。

如果,你觉得还不够好,那就是。。。如果你遇到了官司,你必须请个律师,因为律师毕竟专业更懂法律,更能表达你的意思,其中,律师的角色,就是你的代理。


代理有什么作用?

代理可以起到设置权限,保护对象的作用。因为任何时候你需要访问这个对象,都需要通过代理这个环节。

代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。所以自然而然你会想到在java中使用一个抽象类或者接口(推荐)来实现这个共同的接口。于是代理模式就有三个角色组成了:

1.抽象主题角色:声明了真实主题和代理主题的共同接口。

2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。

3.真实主题角色:定义真实的对象。


代理模式和刚才的装饰模式很类似。为什么?

一个是装饰完了,直接给客户,而代理完了,还得有代理商这关,因为代理商还有个卖不卖给你的问题,是他对产品的控制权限。

表现在代码里面,就是装饰模式,直接把原类传进去的,而代理模式则是在里面new出来的,因此他内部有类的完全控制权。

代理模式在很多情况下都非常有用,特别是你想强行控制一个对象的时候,比如:延迟加载,监视状态变更的方法等等

最后看看代理模式的代码,确实很简单,当然代理模式应用很广泛,别的以后遇到再说。

public class Proxy implements Sourceable {  
  
    private Source source;  
    public Proxy(){  
        super();  
        this.source = new Source();  //请注意这里还装饰模式的不同,那个是直接传入,这里new
    }  
    @Override  
    public void method() {  
        before();  
        source.method();  
        atfer();  
    }  
    private void atfer() {  
        System.out.println("after proxy!");  
    }  
    private void before() {  
        System.out.println("before proxy!");  
    }  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值