您的位置:首页 > 其它

有没有博客同步更新的工具可以推荐给我

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐