【设计模式】代理模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/as15932641664/article/details/81941202

情景一:“喂喂喂,你是XXX代驾公司吗?我在XXXX,我喝多了开不了车,快来吧”

情景二:“在吗,曹哥,听说您最近去巴黎了,巴黎的香水非常有名,您帮我带点回来吧,嘿嘿嘿!”

 

      大家看到上面的两个情景是不是非常熟悉呢?它们就发生在我们身边,我们都遇见过或者都经历过类似于上面的两个情景。想的没错,我要说的就是代理模式


     

      上面两个故事中的访问对象分别是“汽车”,“香水”。由于车主喝多了,无法直接访问对象;由于不在巴黎,无法直接访问对象,所以情景一和二都有一个共同的特点,就是加入了“第三者”,一加入了代驾司机,二加入了代购者(曹哥)。这就是代理模式,用代驾司机和代购者来帮助他们实现功能。

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


为别人做嫁衣  

  

      《哆啦A梦》中,大喜欢静香,一直想给静香送鲜花、送巧克力、送毛绒玩具(这些属于大的行为)但他却羞涩涩的。就利用哆啦A梦的任意门找到了小智,让他把东西送给静香(小智就是代理,大的行为小智自然也会有了)。小智说“好啊”,于是小智每隔一天就会给静香送礼物,并告知这是大雄给你的。终于,皇天不负有心人,静香与小智发展成了男女朋友(此时大雄已哭晕在厕所)

      代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问。上面的大雄对访问对象“静香”就是无法直接访问,所以他找到了一个代理“小智”

      代理模式也可以说是在访问对象时引入一定程度的间接性


结构图

(1)Subject(抽象主题角色):它声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程

(2)Proxy(代理主题角色):它包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;在代理主题角色中提供一个与真实主题角色相同的接口,以便在任何时候都可以替代真实主题;代理主题角色还可以控制对真实主题的使用,负责在需要的时候创建和删除真实主题对象,并对真实主题对象的使用加以约束。通常,在代理主题角色中,客户端在调用所引用的真是主题操作之前或之后还需要执行其他操作,而不仅仅是单纯调用真实主题对象中的操作

(3)RealSubject(真实主题角色):他定了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的操作

猜你喜欢

转载自blog.csdn.net/as15932641664/article/details/81941202