`

[原]代理模式-智能引用代理

阅读更多

[关键字]:java,design pattern,设计模式,《Java与模式》学习,Proxy Pattern,代理模式
[环境]:StarUML5.0 + JDK6
[作者]:Winty (wintys@gmail.com) http://wintys.blogjava.net
[正文]:

智能引用代理:



 


SmartProxyTest.java(并不属于pattern.proxy.smart包):

import pattern.proxy.smart.*;
/**
 * 智能引用代理:Smart Proxy
 *
 * 在搜索的时需要进行进行权限认证和使用计数
 *
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com)
 */
public class SmartProxyTest{
    public static void main(String[] args){
        String result;
        Searcher searcher;

        //未授权访问
        searcher = new ProxySearcher("anonymous");
        result = searcher.search("abc");
        System.out.println("result:" + result);

        //授权访问
        searcher = new ProxySearcher("admin");
        result = searcher.search("xyz");
        System.out.println("result:" + result);
    }
}



Searcher.java:

package pattern.proxy.smart;
/**
 * 搜索
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
public interface Searcher{
    /**
     * @param value 要搜索的内容
     */
    public String search(String value);
}


RealSearcher.java:

package pattern.proxy.smart;
/**
 * 实际执行搜索的类。
 * 为了避免客户端直接使用,本类没有设置为public
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
class RealSearcher implements Searcher{
    @Override
    public String search(String value){
        //在这里可以根据value到数据库中执行实际搜索,
        //此只是示例代码。
        String result = "sample result";

        return result;
    }
}


ProxySearcher.java:

package pattern.proxy.smart;
/**
 * 代理搜索
 * 将搜索传递给RealSearcher并对调用进行验证和计数
 *
 * @version 2009-6-29
 * @author Winty(wintys@gmail.com) http://wintys.blogjava.net
 */
public class ProxySearcher implements Searcher{
    private Searcher searcher;
    private String user;

    public ProxySearcher(String user){
        searcher = new RealSearcher();
        this.user = user;
    }

    @Override
    public String search(String value){

        if(AccessValidator.validate(user)){
            String result = searcher.search(value);
            UsageLogger.log(user , value);
            
            return result;
        }

        return null;
    }
}

/**
 * 对客户端的访问进行验证
 */
class AccessValidator{

    public static boolean validate(String user){
        boolean permission = false;

        if("admin".equals(user))
            permission = true;

        return permission;
    }

}


/**
 * 访问计数
 */
class UsageLogger{
    /**
     * @param user 用户名
     * @param value 搜索的内容
     */
    public static void log(String user , String value){
        String sql;
        sql = "INSERT INTO usage(user , value)  values('";
        sql += user + "' , '" + value + "')";
        //执行SQL: stmt.executeUpdate(sql);   
    }
}


运行结果:
result:null
result:sample result

  • 大小: 58.6 KB
分享到:
评论

相关推荐

    C++设计模式之代理模式(Proxy)

    代理模式是一种程序设计最为重要的一种模式,其具体的使用非常广泛,根据它的作用,其实我们可以直接理解为中间件或者中间层,比如各类软件的中间件,软件与硬件中的... 智能引用代理:是指当调用真实对象时,代理处理

    基于遗传算法的排课系统,含论文(排课 遗传算法 设计模式 智能指针 报表)

    使用技术:遗传算法,引用计数型智能指针,设计模式,多线程 优点:1.采用了智能指针技术(没有使用boost库的引用计数型智能指针,而是参考C++沉思录自己实现的),提高了效率,有利于防止内存泄露。个人也建议在看...

    源码:阎宏设计模式光盘

    源代码清单(按照库排列...com.javapatterns.proxy.smartproxy 专题:智能引用代理 com.javapatterns.proxy.imageloader 专题:虚拟代理的例子 com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻” ...

    asp.net知识库

    ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格...

    GP-卡规范V2.1.1

    A.3. GP在windows Powered智能卡 136 B. 算法(加密和HASH) 138 B.1. 数据加密标准(DES) 138 B.1.1. 加密/解密 138 B.1.1.1. CBC模式 138 B.1.1.2. ECB模式 138 B.1.2. MAC 138 B.1.2.1. 完整的TDES MAC 138 B....

    vc++ 开发实例源码包

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    Git权威指南PDF完整版

    30.4.4 对引用的授权:传统模式/ 430 30.4.5 对引用的授权:扩展模式/ 430 30.4.6 对引用的授权:禁用规则的使用/ 431 30.4.7 用户分支/ 431 30.4.8 对路径的写授权/ 432 30.5 创建新版本库/ 432 30.5.1 在配置文件...

    vc++ 应用源码包_6

    原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...

    vc++ 应用源码包_5

    原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...

    vc++ 应用源码包_3

    原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...

    vc++ 应用源码包_1

    原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...

    vc++ 应用源码包_2

    原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...

    asp.net技术内幕(1)

    1.4.3 ASP.NET控件 1.4.4 代码显示块 1.4.5 服务器端注释 1.4.6 服务器端包含指令 1.4.7 文本和HTML标记 1.5 小结 <br>第2章 用Web服务器控件建立表单 <br>2.1 建立智能表单 ...

    asp.net技术内幕(2)

    1.4.3 ASP.NET控件 1.4.4 代码显示块 1.4.5 服务器端注释 1.4.6 服务器端包含指令 1.4.7 文本和HTML标记 1.5 小结 <br>第2章 用Web服务器控件建立表单 <br>2.1 建立智能表单 ...

    asp.net技术内幕(5)

    1.4.3 ASP.NET控件 1.4.4 代码显示块 1.4.5 服务器端注释 1.4.6 服务器端包含指令 1.4.7 文本和HTML标记 1.5 小结 <br>第2章 用Web服务器控件建立表单 <br>2.1 建立智能表单 ...

    asp.net技术内幕(4)

    1.4.3 ASP.NET控件 1.4.4 代码显示块 1.4.5 服务器端注释 1.4.6 服务器端包含指令 1.4.7 文本和HTML标记 1.5 小结 <br>第2章 用Web服务器控件建立表单 <br>2.1 建立智能表单 ...

Global site tag (gtag.js) - Google Analytics