当前位置:首页 > 开发 > Web前端 > 前端 > 正文

java设计模式之代理模式

发表于: 2013-11-13   作者:基地分子   来源:转载   浏览:
摘要: 代理和装饰模式的区别: 他们在代码实现上有很大的相同点但是本质有着区别 装饰器模式:能动态的新增或组合对象的行为。 代理模式:为其他对象提供一种代理以控制对这个对象的访问. 装饰模式是“新增行为”,而代理模式是“控制访问”。关键就是我们如何判断是“新增行为”还是“控制访问”。 代理具体的时间方法: 第一步:定义一个接口: package cn.eversec.pr
代理和装饰模式的区别:

他们在代码实现上有很大的相同点但是本质有着区别

装饰器模式:能动态的新增或组合对象的行为。 
代理模式:为其他对象提供一种代理以控制对这个对象的访问. 
装饰模式是“新增行为”,而代理模式是“控制访问”。关键就是我们如何判断是“新增行为”还是“控制访问”。

代理具体的时间方法:

第一步:定义一个接口:
package cn.eversec.proxy;
public interface Student {
public String xuexi();
public String daren();
}
第二步:实现要代理的接口
package cn.eversec.proxy;
public class StudentImpl implements Student {
@Override
public String xuexi() {
// TODO Auto-generated method stub
return "haohaoxuexi,tiantianxiangshang";
}
 
@Override
public String daren() {
// TODO Auto-generated method stub
return "woyaodaren";
}
}
第三部:书写代理逻辑(这里采用动态代理的方式)
package cn.eversec.proxy;
 
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
 
public class ProxyImpl implements InvocationHandler {
 //定义一个对象(实际就是要代理的对象)
private Object obj;
 
public ProxyImpl(){
 
}
 
public ProxyImpl(Object obj){
this.obj=obj;
}
 
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
 
if(method.getName().equals("xuexi")){
before();
Object invoke = method.invoke(obj, args);
after();
return invoke;
}else{
Object invoke = method.invoke(obj, args);
return invoke.toString();
}
}
 
public static Object factory(Object obj)  
   {  
       Class cls = obj.getClass();  
       return Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),new ProxyImpl(obj));  
   }  
 //代理前的操作
public void before(){
System.out.println(">>>>>");
}
 //代理后的操作
public void after(){
System.err.println("============");
}
 
}
第四步:书写测试类
package cn.eversec.proxy;
 
public class DynamicProxy {
 
public static void main(String[] args) {
 
Student student = new StudentImpl();
 
Student factory = (Student) ProxyImpl.factory(student);
 
String xuexi = factory.xuexi();
 
System.out.println(xuexi);
 
// String daren = student.daren();
// System.out.println(daren);
}
}
以上代码如有疑问可以询问892086352

 

java设计模式之代理模式

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号