国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php框架 > 框架设计 > [置顶] 代理模式在android中使用

[置顶] 代理模式在android中使用

来源:程序员人生   发布时间:2015-06-23 08:12:11 阅读次数:3470次

代理模式(Proxy):

代理设计模式是对象的结构模式,原理就是给某个对象提供1个代理对象,并由代理对象来控制对愿对象的援用。在有些情况下,1方不能或不想直接援用1个对象,而代理对象可以在双方之间起到中介的作用,这样可以大大下降彼此的耦合关系,提高彼此的灵活性。下面为代理模式的简略结构类图:

 

代理模式的角色有3个,分别为:抽象角色、代理角色和具体角色。具体以下:

抽象角色:声明了代理角色和具体角色的共用接口,促使可使用具体实角色的地方都可以使用代理角色。

具体角色:定义代理角色所要代表的具体角色。

代理角色:包括对具体角色的援用,从而可以在任什么时候候操作具体角色对象;代理角色提供了与具体角色相同的接口,可以方便在任什么时候候替换具体角色对象。

 

下面我们举个实际例子进行说明朝理的使用。在项目当中,我们要实现1个搜索功能,搜索数据之前,需要先验证用户是不是为登录或会员,如果不是会员,那末提示并返回不准即系查询;另外,我们还需要记录会员的搜索记录次数,这样可以帮助运营的后期推行统计哦!固然,这里只是摹拟实现,验证失败则提示权限不够,记录的次数显示为搜索的次数(每次搜索记录便可),而终究搜出的结果,直接显示为搜索的关键字(正常不是这样的哦)。

下面为我的搜索功能的详细类图结构关系:

 

 

好了,准备的工作已好了,接下来请看具体的代码实现,具体以下:

ProSearcher:

public interfaceProSearcher {

  

   /**

    * 声明1个抽象的方法

    */

   StringdoSearch(String userName,Stringpassword,String key);

  

}

 

ProRealSearcher:

public class ProRealSearcher implements ProSearcher {

  

   public ProRealSearcher() {

      super();

   }

 

   /**

    * 真实的查询操作在这里进行

    */

   @Override

   public String doSearch(StringuserName, String password, Stringkey) {

      // 参数封装

      StringBuffersb = new StringBuffer();

      sb.append(userName);

      sb.append(password);

      sb.append(key);

      Stringrequest = sb.toString();

      // 网络要求

      asyncTask(request);

     

      return key;

   }

  

   private void asyncTask(Stringparams) {

      // 网络要求核心代码

      // TODO

   }

 

}

 

ProAccessValidator:

public classProAccessValidator {

 

   /**

    * 查询前校验用户权限

    */

   public booleanvalidateUser(String userName,Stringpassword) {

      if("david001".equals(userName) &&

            "123456".equals(password)) {

         return true;

      }

     

      return false;

   }

}

 

ProSearchRecorder:

public classProSearchRecorder {

   private StringuserName;

  

   /**

    * 返回用户搜索的次数和传递日志到服务端

    */

   public int save(int records) {

      // 保存本次搜索记录并传递服务器

      StringrecordRemote = userName + "次数:" +records;

      return save(recordRemote,records);

   }

  

   private int save(String record,intrecords) {

      records ++;

      // 传递记录到服务器

      // TODO

      return records;

   }

  

   public voidsetUserName(String name) {

      userName = name;

   }

}

 

ProSearcherProxy:

public class ProSearcherProxyimplements ProSearcher {

   private ProRealSearchersearcher = null;

   private ProAccessValidatoraccessValidate = null;

   private ProSearchRecordersearchRecorder = null;

  

   public ProSearcherProxy() {

      searcher = new ProRealSearcher();

   }

  

   @Override

   public String doSearch(StringuserName, String password, Stringkey) {

      if(validateUser(userName,password)) {

         Stringresult = searcher.doSearch(userName, password, key);

         logUserRecord(userName);

         returnresult;

      }

     

      return null;

   }

  

   /**

    * 校验用户权限

    */

   private booleanvalidateUser(String userName,Stringpassword) {

      accessValidate = new ProAccessValidator();

      return accessValidate.validateUser(userName, password);

   }

  

   /**

    * 查询日志操作记录

    */

   private voidlogUserRecord(String userName) {

      searchRecorder = new ProSearchRecorder();

      searchRecorder.setUserName(userName);

   }

}

 

上面为代理模式的核心代码,具体的前端代码这里不罗列出来了,稍后我会将项目代码传递上去。效果图以下:

 

 

点击我下载代码! 


技术交换群:179914858

 

 

 

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生