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