代理模式的典型例子,java代理模式的典型例子?

生活中,我们买房子或者卖房子的时候,大多数的情况下我们是不能直接找到并面对客户的,这个时候我们往往会借助中介或者代理的方式来完成我们的想法。与此类似的,在软件设计中,使用代理模式的例子也很多,下面我们简要说明。


定义与特点

由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。简单来说就是,为一个类(委托类)创建一个代理类,由代理类来代表它来对外提供功能。


代理模式的优缺点:

优点有:

  • 在客户端与目标对象之间起到一个中介作用和保护目标对象的作用;
  • 代理对象可以扩展目标对象的功能;
  • 将客户端与目标对象分离,在一定程度上降低了系统的耦合度,增加了程序的可扩展性

缺点是:

  • 代理模式会造成系统设计中类的数量增加
  • 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢;
  • 无故增加了系统的复杂度;


代理模式的构造方式:

首先要明确两个角色,一个是委托类,一个是代理类。二者共同实现一个公共接口

沿着这个思路我们设计这样一个场景。比如富豪张三(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晚上都是有实战干货的推广引流技术课程免费分享!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 sumchina520@foxmail.com 举报,一经查实,本站将立刻删除。

您可能还会喜欢:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。