最近研究java设计模式,当研究到proxy模式的时候恍然大悟,感觉这种模式设计的好精妙,下面我写一下个人对此模式的理解,使用例子是最容易理解的上代码.
首先person接口
package com.it.proxy;
/**
* person接口
* @author Gaoxu
*2015-1-28
*/
public interface person {
void save(String name);
void delete(String name);
}
数据库操作实现person
package com.it.proxy;
/**
* 实现person接口
* 数据库操作类
* @author Gaoxu
*2015-1-28
*/
public class DBperson implements person{
@Override
public void save(String name) {
//业务逻辑 ,数据库操作
//真正与数据库进行交互
System.out.println("保存了:" +name);
}
@Override
public void delete(String name) {
//业务逻辑 ,数据库操作
System.out.println("删除了:"+ name);
}
}
接下来是person的代理类,此类同样实现person接口,但是不做数据库操作,而是进行拦截,代理说白了就是一个中介,你不能直接操作person类,但是又必须有操作,就可以通过代理类进行操作,代理类再进行真正的交互。
<pre name="code" class="java">package com.it.proxy;
/**
* person代理类
* @author Gaoxu
*2015-1-28
*/
public class personProxy implements person{
private person p;
private String permissions;
public personProxy(person p,String permissions) {
super();
this.p = p;
this.permissions=permissions;
}
@Override
public void save(String name) {
//业务逻辑控制,代理类进行拦截
if("admin".equals(permissions)){
p.save(name);
}else{
System.out.println("无此权限保存:"+name);
}
}
@Override
public void delete(String name) {
//业务逻辑控制,代理类进行拦截
if("admin".equals(permissions)){
p.delete(name);
}
else{
System.out.println("无此权限删除:"+name);
}
}
public String getPermissions() {
return permissions;
}
public void setPermissions(String permissions) {
this.permissions = permissions;
}
}
测试类
<pre name="code" class="java">package com.it.proxy;
public class proxyTest {
public static void main(String[] args) {
personProxy personProxy = new personProxy(new DBperson(), "admin");
personProxy.save("小马");
personProxy.delete("小马");
personProxy.setPermissions("noadmin");
personProxy.save("小马");
personProxy.delete("小马");
}
}
结果:
保存了:小马
删除了:小马
无此权限保存:小马
无此权限删除:小马