设计模式之代理模式
2016-06-04 11:26
776 查看
代理模式
代理模式说明:代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。
1. 静态代理模式
UML图如下所示:具体代码如下所示:
package com.dai.proxy.staticproxy1;
/**
* @author 戴礼明
*日期: 2016-6-4
*content: 接口
*/
public interface Subject {
public void subjectProp();
}
package com.dai.proxy.staticproxy1;
/**
*
* @author 戴礼明
*日期: 2016-6-4
*content:物品
*/
public class RealSubject implements Subject{
public RealSubject() ;
}
public void subjectProp() {
System.out.println("我是真实的商品!");
}
}
package com.dai.proxy.staticproxy1;
/**
* @author 戴礼明
*日期: 2016-6-4
*content:代理subject类
*/
public class ProxySubject implements Subject{
private RealSubject subject;
public ProxySubject() {
subject=new RealSubject();
}
public void subjectProp() {
System.out.println("我代理了真实的商品!");
subject.subjectProp();
}
}
package com.dai.proxy.staticproxy1;
/**
*
* @author 戴礼明
*日期: 2016-6-4
*content:静态代理测试
*/
public class TestProxy {
public static void main(String[] args) {
new ProxySubject().subjectProp();
}
}
2. 动态代理
UML图如下所示:代码如下所示:
package com.dai.proxy.dynamicproxy1;
/**
* @author 戴礼明
*日期: 2016-4-17
*content:
*/
public interface Subject {
public void subjectProp();
}
package com.dai.proxy.dynamicproxy1;
/**
*
* @author 戴礼明
*日期: 2016-4-17
*content:
*/
public class RealSubject implements Subject{
public void subjectProp() {
System.out.println("我是真实的产品!");
}
}
package com.dai.proxy.dynamicproxy1;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* @author 戴礼明
*日期: 2016-4-17
*content:
*/
public class SubjectProxyHandler implements InvocationHandler{
private Object proxied;
public SubjectProxyHandler(Object proxied) {
this.proxied=proxied;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println(method.getName());
System.out.println("我是代理产品!");
method.invoke(proxied, args);
return null;
}
}
package com.dai.proxy.dynamicproxy1;
import java.lang.reflect.Proxy;
/**
* @author 戴礼明
*日期: 2016-4-17
*content:动态代理类
*/
public class DynamicProxy {
public static void main(String[] args) {
RealSubject realSubject=new RealSubject();
SubjectProxyHandler handler=new SubjectProxyHandler(realSubject);
Subject subject=(Subject) Proxy.newProxyInstance(Subject.class.getClassLoader(), new Class[]{Subject.class},handler);
subject.subjectProp();
}
}
相关文章推荐
- C语言内存管理函数
- 定时任务 Crontab命令 详解
- linux 下解压命令汇总
- poj1236 Network of Schools
- 2016年工作中遇到的问题21-30
- 2016年工作中遇到的问题21-30
- JavaScript中回调函数的上下文问题
- 【转载】非常好的理解遗传算法的例子
- JAVA使用增强for循环和迭代器遍历Map集合
- 导航栏吸顶实现原理 JS
- 百度导航坐标转换问题
- BitMap的recycle问题
- block,inline和inlinke-block细节对比
- Andorid通用流行框架
- 确定网页适配及流量压缩的业务流量的方法、系统和设备
- (转)iPhone实战:动态改变UITableView中的Cell高度
- 阿里云主机服务器端配置
- vs打开项目出错:未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations\CUDA 5.0.props”的解决办法
- 最优买书问题
- TCP连接状态解析和过程分析