科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件深入浅出基于Java的代理设计模式

深入浅出基于Java的代理设计模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

代理模式在设计模式中的定义就是:为其他对象提供一种代理以控制对这个对象的访问。

作者:中国IT实验室 来源:中国IT实验室 2007年8月26日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、结构
  代理模式中的“代理商”要想实现代理任务,就必须和被代理的“厂商”使用共同的接口(你可以想象为产品)。所以自然而然你会想到在java中使用一个抽象类或者接口(推荐)来实现这个共同的接口。于是代理模式就有三个角色组成了:
  
  1.抽象主题角色:声明了真实主题和代理主题的共同接口。
  
  2.代理主题角色:内部包含对真实主题的引用,并且提供和真实主题角色相同的接口。
  
  3.真实主题角色:定义真实的对象。
  
  使用类图来表示下三者间的关系如下:
  
  当然,图上所示的是代理模式中的一个具体情况。而代理模式可以非常灵活的使用其他方式来实现,这样就与图上所示有很大的区别。
  
  也许,现在你已经对代理模式已经有了一个宏观的认识了,下面我们来看看怎么实际的使用代理模式。
  
  四、举例
  以论坛中已注册用户和游客的权限不同来作为第一个例子:已注册的用户拥有发帖,修改自己的注册信息,修改自己的帖子等功能;而游客只能看到别人发的帖子,没有其他权限。为了简化代码,更好的显示出代理模式的骨架,我们这里只实现发帖权限的控制。 首先我们先实现一个抽象主题角色MyForum,里面定义了真实主题和代理主题的共同接口——发帖功能。
  
  代码如下:
  
  public interface MyForum
  
  {
  
  public void AddFile();
  
  }
  
  这样,真实主题角色和代理主题角色都要实现这个接口。其中真实的主题角色基本就是将这个接口的方法内容填充进来。所以在这里就不再赘述它的实现。我们把主要的精力放到关键的代理主题角色上。代理主题角色代码大体如下:
  
  public class MyForumProxy implements MyForum
  {
  private RealMyForum forum ;
  private int permission ; //权限值
  
  public MyForumProxy(int permission)
  {
  forum = new RealMyForum()
  this.permission = permission ;
  }
  
  //实现的接口
  
  public void AddFile()
  {
  //满足权限设置的时候才能够执行操作
  //Constants是一个常量类
  if(Constants.ASSOCIATOR == permission)
  {
  forum.AddFile();
  }
  else
  System.out.println("You are not a associator of MyForum ,please registe!");
  }
  }
  
  这样就实现了代理模式的功能。当然你也可以在这个代理类上添加自己的方法来实现额外的服务,比如统计帖子的浏览次数,记录用户的登录情况等等。
  
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章