andy's blog

记录我的所做所思

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  1 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

一:
     某些情况下客户不想或不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起中介作用
    1:远程(remote)代理:访问不同在一个JVM的类的方法。
    2:虚拟(virtual)代理:根据需要创建一个资源消耗较大的对象,使得此对象只在真正需要时才创建
                                        (如加载图片)
    3:智能引用(smart reference)代理:当一个对象被引用时,提供一些额外的操作,比如将此对象调用的
                                                               次数记录下来。
    4:保护(protection)代理:控制一个对象的访问(权限控制)。
  

// 查询代理类
public   class  SearcherProxy  implements  Searcher {
    
private  Searcher searcher;
    
public  SearcherProxy()
    
{
        searcher
= new  RealSearcher(); // 真正的查询类
    }

    
public  String doSearch(String userId, String searchType)  {
        
if  (checkAccess(userId))
        
{
            String result
= searcher.doSearch( null ,searchType);
            logUsage(userId);
            
return  result;
        }

        
else   return   null ;
    }

    
// 检查权限
     private   boolean  checkAccess(String userId)
    
{
        AccessValidater validater
= new  AccessValidater();
        
return  validater.validateUser(userId);
    }

    
// 记录使用情况
     private   void  logUsage(String userId)
    
{
        UserLogger logger
= new  UserLogger();
        logger.setUserId(userId);
        logger.save();
    }

}

 

// 客户端使用
     public   static   void  main(String[] args)
    
{
        Searcher searcher
= new  SearcherProxy();
        System.out.println(searcher.doSearch(
" admin " , " haha " ));
    }


 

posted on 2006-03-30 15:34 zhoumin 阅读(87) 评论(0)  编辑  收藏 所属分类: 设计模式

只有注册用户登录后才能发表评论。


网站导航: