生活中,我们🌄买房子或者卖房子的时候,大多数的情况下我们是不能直接找到并面对客户的,这个时候我们往往会借助中介或者代理的方式来完成我们的想法。与此类似的,在软件设计中,使用代理模式的例子也很多,下面๊我们简要说明。
定义与特点
由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象▨之间的中介。简单来说就是𒊎,为一个类(委托类)创建一个代理类,由代理类来代表它来对外提供功能。
代理模式的优缺点:
优点有:
- 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
- 代理对象可以扩展目标对象的功能;
- 将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性
缺点是:
- 代理模式会造成系统设计中类的数量增加
- 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
- 无故增加了系统的复杂度;
代理模式的构造方式:
首先要明确两个角色,一个是委托类,一个是代理类。二者共同实现一个公共接口。
沿着这个思路我们设计这样一个场景。比如富豪张三(Zhangsan)无故被人抹黑造谣,由于自己公务繁忙,无法到公🌟共场合𝄹为自己发表清白声明,于是找到了律师(Lawyer)代自己公开进行一份声明。下面就是我们的代码秀:
//公共接口
interface Announce {
//对外声明
void declare();
}
//委托人
class Zhangsan implements Announce {
//对外声明
public void declare() {
System.out.println("我是张三,我是清白的。巴拉巴拉巴拉巴拉巴拉啦啦啦啦啦");
}
}
//代理人
class Lawyer implements Announce {
//声明为张三提供服务
private Announce zhangsan = new Zhangsan();
//对外声明
public void declare() {
this.preDeclaration()
//张三的实际发声
zhangsan.declare();
this.postDeclaration();
}
//礼貌起见,声明之前介绍自己身份
private void preDeclaration() {
System.out.println("大家好,我是张三先生的私人律师");
}
//礼貌起见,声明完成之后可以致谢
private void postDeclaration() {
System.out.println("感谢大家对张三先生的支持");
}
}
//写了半天,我们来测试下实际效果
public class ProxyAnnounce{
public static void main(String[] args){
private Announce lawyer = new Lawyer();
lawyer.declare();
}
}
输出结果为:
大家好,我是张三先生的私人律师
我是张三,我是清白的。巴拉巴拉巴拉巴拉巴拉啦啦啦啦啦
感谢大家对张三先生的支持
上面是一个很简单的例子,可以看出,我们想对外开放某些功能,就可以将这些功能在代理类中被引用,如此一来,屏蔽了我们不想外露的功能,只将我们想开放的功能开放出来。亦即委托类中其实൲是可以有很多方法的,很多功能的,我们可以酌情对外开放,代理类犹如一道大门,将委托类与外部调用者隔绝开来,只将部分功能赋予这个大门,来代替委托类行使这个功能,哪怕最终还是🍬要牵扯到自身(因为最终还是要调用委托类的对应方法实现)。
如若有想学习和交流Java的朋友,可添加微信号:zhuawac,请备注来意,否则会被拒哦!
好了,这篇文章的内容发货联盟就和大家分享到这里,如果大家网络推广引流创业感兴趣,可以添加微信:80709525 备注:发货联盟引流学习; 我拉你进直播课程学习群,每周135晚上都是有实战干货的推广引流技术课程免费分享!