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,请备注来意,否则会被拒哦!

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年4月6日
    下一篇 2022年4月6日

    相关推荐