[关键字]: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
分享到:
相关推荐
代理模式是一种程序设计最为重要的一种模式,其具体的使用非常广泛,根据它的作用,其实我们可以直接理解为中间件或者中间层,比如各类软件的中间件,软件与硬件中的... 智能引用代理:是指当调用真实对象时,代理处理
使用技术:遗传算法,引用计数型智能指针,设计模式,多线程 优点:1.采用了智能指针技术(没有使用boost库的引用计数型智能指针,而是参考C++沉思录自己实现的),提高了效率,有利于防止内存泄露。个人也建议在看...
源代码清单(按照库排列...com.javapatterns.proxy.smartproxy 专题:智能引用代理 com.javapatterns.proxy.imageloader 专题:虚拟代理的例子 com.javapatterns.serializable 专题:JavaBean的“冷藏”和“解冻” ...
ASP.NET 2.0 异步页面原理浅析 [1] [原] 自定义通用System.Web.UI.IHierarchicalDataSource简单实现 在 ASP.NET 2.0 中创建 Web 应用程序主题 ASP.NET 2.0 中的数据访问 ASP.NET 2.0:弃用 DataGrid 吧,有新的网格...
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....
CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...
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 在配置文件...
原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...
原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...
原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...
原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...
原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ListBox控件与其它控件阙套使用...
6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...
Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...
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 建立智能表单 ...
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 建立智能表单 ...
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 建立智能表单 ...
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 建立智能表单 ...