Java23种设计模式——6.结构型模式之代理模式

Java中除去有设计原则之外,还有23中设计模式。

这些模式都是前辈们一点一点积累下来,一直在改进,一直在优化的,而这些设计模式可以解决一些特定的问题。

并且在这些模式中,可以说是将语言的使用体现的淋漓尽致。

那我们今天要学习  结构型模式  中的  代理模式  !

代理模式

这个是结构型模式中的第一个模式,叫代理模式。我们先来百度百科一下, 看看啥叫代理模式

我们来看后一句话,它说代理者可以作任何东西的接口,好比网上链接,存储器中的大对象,文件等等。

额...其实看完这句话我们还是不知道啥是代理模式,不要慌,继续往下看,找到简介

这个我们先就看第一段(主要下面涉及到另外一个我们没有学过的设计模式,所以暂时先不看,但你如果有兴趣,可以自己去研究研究),通过它这个的叙说,我们就能大致明白了。

代理模式就好比我们通过中介购买房子一样,这个中介就是代理者,我们就是客户端,而目标对象就是房子的主人。我们通过和中介的沟通,协商,看房,最后购买上房子,在这个过程中,我们自始至终都没有和房子的主人打交道。

上面说的这个是我们生活中的,下面我来举例说一下我们软件设计中的。

比如我们现在要查看A这个企业的数据库,但是A不能说直接就把数据库的连接信息,用户名密码给你,万一你给人家把库一删,跑路了怎么办。所以A这个企业就需要找一个代理者,你直接和这个代理者沟通,需要看啥,让代理者进行查看。到时候如果A企业的数据库出问题也不会找到你的头上。

代理模式的定义与优缺点

代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。

优点:

1. 代理模式,起到了一个中间作用,并且很好地保护目标对象的安全。

2. 代理对象(也就是中介)可以扩展目标对象的功能。(就好比买房子,中介自己掏钱,多送你一个茶几、沙发啥的)

3. 代理模式能把客户端和目标对象分离,在一定程度上降低了系统的耦合度。

缺点:

1. 在客户端和目标对象之间塞一个代理,这样会造成请求速度变慢。(你直接和房东沟通,和你找中介,中介找房东沟通)

2. 增加了系统复杂度。(以前维护客户端和目标对象就好,现在又多了一个中介。)

代理模式的结构与实现

代理模式是由三块内容组成:

1. 抽象主题(Subject),抽象主题实际上就是一个接口,主要是把目标对象的一些信息进行抽象

2. 真实主题(Real Subject),实现抽象主题,这个就好比房子的主人

3. 代理(Proxy),(这个就是中介)代理中提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。(也就是送沙发送茶几啥的,这就是扩展)

 

知道了这个模式的结构内容之后,我们来自己定一下需求,这里我就不弄新的例子了,就实现一下上面买房子的案例。

1. 首先我们先定义一下这个抽象主题(Subject),注意啊,这是一个接口!!!

在这个接口中,我们提供一个看房子的方法

2. 接着,再定义一个真实主题(Real Subject),顺便让这个真实主题去实现上面的这个接口

这里我们输出一句话,这个房子很大很大,采光超好,下水不堵塞,隔音杠杠的。

3. 好,有了这些之后,我们再来弄一个代理。这里这个代理也需要实现抽象主题(原因是代理也需要知道自己要代理啥,不告诉它,它就懵逼了)

我们上面说了,这个代理必须里面含有真实主题的引用,所以,我们再定义一个房东。

我们在这个lookHouse中实现一下房东所交代的内容。

当然,我们也来添加一些扩展

注意啊,这个是私有的,因为是中介自己扩展的。

接下来,我们来测试一下。弄个测试类,ProxyTest

到这里为止呢,我们的代理模式就学习完成了。

大家好好看一下,多练习一下。有不懂的可以直接加我QQ:2100363119

 

ps:上方二维码是我个人的公众号,最近刚开不久,我每个月都会更新一些活动,希望大家可以积极参加,活动详情可以关注公众号之后,回复“活动”二字进行查看,参加。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

他 他 = new 他()

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

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

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

打赏作者

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

抵扣说明:

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

余额充值