设计模式之代理模式

代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

一、代理模式

生活中,我们去租房子的时候,会去找中介,因为他们比较专业,熟悉房源信息;打官司的时候,聘请律师,因为他们更有经验…,诸如此类的事件,都有代理模式的含义,其UML图如下:

这里写图片描述

代理模式一般会有三个角色:

抽象角色(Subject):指代理角色和真实角色对外提供的公共方法,一般为一个接口。

真实角色(RealSubject):需要实现抽象角色接口,定义了真实角色所要实现的业务逻辑,以供代理角色调用,也就是真正的业务逻辑在此

代理角色(Proxy):需要实现抽象角色接口,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法。

二、案例分析

我们都知道《西游记》中去往西天取经的是师徒四人,但其实唐僧是代替唐太宗去往西天取经的。不信,你看书中第十二回《玄奘秉诚建大会 观音显象化金蝉》中这样描绘:

太宗见了颂子,即命众僧:“且收胜会,待我差人取得大乘经来,再秉丹诚,重修善果。”众官无不遵依。当时在寺中问曰:“谁肯领朕旨意,上西天拜佛求经?”问不了,旁边闪过法师,帝前施礼道:“贫僧不才,愿效犬马之劳,与陛下求取真经,祈保我王江山永固。”唐王大喜,上前将御手扶起道:“法师果能尽此忠贤,不怕程途遥远,跋涉山川,朕情愿与你拜为兄弟。”

在世人看来,这经就是唐僧给取回来的,但只有皇帝知道,这经是唐僧替自己取回来的。这就是一个简单的代理模式,其UML图如下:

这里写图片描述

Subject–Person类,不管是皇帝还是唐僧,都要完成取经的任务。

interface Person {
    public void takeBook();
}

RealSubject–实际完成的是唐太宗的旨意。

class Emperor implements Person {
    public void takeBook() {
        System.out.println("我是皇帝,我要上西天拜佛求经。");
    }
}

Proxy–唐僧,代替皇帝完成取经任务。


class TangMonk implements Person {

    Emperor emperor = new Emperor();
    public void takeBook() {
        emperor.takeBook();
    }
}

故事上演:

public class Story(){
  public static void main (String [] args){
    TangMonk tangMonk = new TangMonk();
    tangMonk.takeBook();
  }
}

运行结果:

这里写图片描述

代码地址:Proxy

综上就是一个代理模式的例子,使用代理模式,可以将系统功能划分的更加清晰。

欢迎大家留言评论,点击查看更多设计模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值