有没有博客同步更新的工具可以推荐给我
2006-12-30 00:56
405 查看
介绍下静态代理,其实很简单就是甲代替乙去做一件事情,表面上看大家都认为是甲做的,其实是甲借助乙来完成的这件事情,只是大家看不到实质罢了,废话不多说,看个实际例子,有个类乙需要实现 增删改查功能 但是实现之后发现不完美,想要修改下,追加一些额外的工作,比如安全性检查、日志之类的(横切性问题)问题。
乙的接口如下:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:37:31
*/
public interface ManagerInterface {
public void add();
public void delete();
public void modify();
public String search();
}
接口的实现 乙为:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:38:26
*/
public class ManagerImpl implements ManagerInterface {
public void add() {
System.out.println("add");
}
public void delete() {
System.out.println("delete");
}
public void modify() {
System.out.println("modify");
}
public String search() {
System.out.println("search");
return "search=============================";
}
}
现在想增加安全性检查,即调用此实现来实现增删改查的时候要有安全性验证,否则不能为其提供服务。但是此时这部分代码已经封板不能做任何改动,那怎么办呢?想想如果造出来一个路人甲来代替它,这样就可以在不改变乙的情况下来完成预期的目标了。
采用静态代理要与目标对象实现相同的接口,同样也有增删改查等操作,同时在每个操作中已经添加了相应的安全性检查的代码,查看下面代码发现采用了组合的方式,即 代理类持有目标对象的引用,通过构造方法给乙引用赋值。在代理类的增删改查操作中调用的还是原来乙的增删改查操作。代码如下:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:52:52
*/
public class ManagerStaticProxy implements ManagerInterface {
ManagerImpl managerImpl;
public ManagerStaticProxy(ManagerImpl managerImpl) {
this.managerImpl = managerImpl;
}
public void add() {
checkSecurity();
managerImpl.add();
}
public void delete() {
checkSecurity();
managerImpl.delete();
}
public void modify() {
checkSecurity();
managerImpl.modify();
}
public String search() {
checkSecurity();
managerImpl.search();
return "StaticProxySearch=====================";
}
public void checkSecurity(){
System.out.println("checkSecurity==============================");
}
}
这样客户端调用就可以达到设想的目标
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:56:03
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
ManagerStaticProxy managerStaticProxy = new ManagerStaticProxy(new ManagerImpl());
managerStaticProxy.add();
managerStaticProxy.delete();
managerStaticProxy.modify();
System.out.println(managerStaticProxy.search());
}
}
全部代码见附件
本文出自 “与青春有关的日子” 博客,请务必保留此出处http://zhangdivy.blog.51cto.com/1647167/1029523
乙的接口如下:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:37:31
*/
public interface ManagerInterface {
public void add();
public void delete();
public void modify();
public String search();
}
接口的实现 乙为:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:38:26
*/
public class ManagerImpl implements ManagerInterface {
public void add() {
System.out.println("add");
}
public void delete() {
System.out.println("delete");
}
public void modify() {
System.out.println("modify");
}
public String search() {
System.out.println("search");
return "search=============================";
}
}
现在想增加安全性检查,即调用此实现来实现增删改查的时候要有安全性验证,否则不能为其提供服务。但是此时这部分代码已经封板不能做任何改动,那怎么办呢?想想如果造出来一个路人甲来代替它,这样就可以在不改变乙的情况下来完成预期的目标了。
采用静态代理要与目标对象实现相同的接口,同样也有增删改查等操作,同时在每个操作中已经添加了相应的安全性检查的代码,查看下面代码发现采用了组合的方式,即 代理类持有目标对象的引用,通过构造方法给乙引用赋值。在代理类的增删改查操作中调用的还是原来乙的增删改查操作。代码如下:
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:52:52
*/
public class ManagerStaticProxy implements ManagerInterface {
ManagerImpl managerImpl;
public ManagerStaticProxy(ManagerImpl managerImpl) {
this.managerImpl = managerImpl;
}
public void add() {
checkSecurity();
managerImpl.add();
}
public void delete() {
checkSecurity();
managerImpl.delete();
}
public void modify() {
checkSecurity();
managerImpl.modify();
}
public String search() {
checkSecurity();
managerImpl.search();
return "StaticProxySearch=====================";
}
public void checkSecurity(){
System.out.println("checkSecurity==============================");
}
}
这样客户端调用就可以达到设想的目标
package com.staticProxy;
/**
* @author
*
* 2012-10-17上午9:56:03
*/
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
ManagerStaticProxy managerStaticProxy = new ManagerStaticProxy(new ManagerImpl());
managerStaticProxy.add();
managerStaticProxy.delete();
managerStaticProxy.modify();
System.out.println(managerStaticProxy.search());
}
}
全部代码见附件
本文出自 “与青春有关的日子” 博客,请务必保留此出处http://zhangdivy.blog.51cto.com/1647167/1029523
相关文章推荐
- 有没有博客同步更新的工具可以推荐给我
- 【工具】今天有人问我可以直接离线一个完整的网站吗?有没有什么工具之类的?我推荐一款:Httrack (网站复制机)案例:离线你的博客园
- 推荐的几个开发常用在线工具,可以提升开发效率(持续更新)
- 转-推荐的几个开发常用在线工具,可以提升开发效率(持续更新)
- 特大通知!!!CSDN和简书博客以后同步更新
- 推荐一款帮助负载均衡/DNS轮询服务器组使用的文件同步工具
- 推荐一个很好的网盘,可以在不同电脑间同步文件!
- 【推荐】sqlserver里有没有定时执行sql语句更新数据库的功能?
- 优秀博客推荐(持续更新)
- FileSync文件同步更新工具
- java开发线程篇1:java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?
- [置顶] 推荐几个技术博客,持续更新中...
- 有没有什么命令行或工具可以查看so文件的方法名不?
- Linux下6款值得推荐的博客工具
- 社区评论可以同步到个人博客了!
- 推荐一些前端开发好的博客及文章、工具
- 推荐一个好的博客下载工具
- ArcGIS知乎上有哪些干货可以推荐?(持续更新中)
- ERP系统管理员的工具箱 推荐几款优秀的数据比较同步工具 Data Compare and Sync tool
- 推荐大学生们必须要读的一个博客。可以让你少奋斗10年的工作经验(转)