代理模式(Proxy Pattern)
代理模式是软件设计模式中的一种基本技巧。代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
一般包括三部分:
1.抽象角色:真实对象和代理对象的共同接口
2.真实角色:真实处理请求的目标对象
3.代理角色:代理对象角色内部含有真实对象的引用,从而代理对象可以将请求转化为真实对象处理。同事,代理对象在执行真实对象操作的前后还可以添加附加操作。
举例:红酒代理商
抽象角色
public interface IRedWine {
public void product();
}
真实角色
public class RealRedWineFactory implements IRedWine{
@Override
public void product() {
System.out.println("生产红酒");
}
}
代理角色
public class RedWineProxy implements IRedWine{
private IRedWine redWineFactory;
public RedWineProxy(IRedWine redWineFactory){
this.redWineFactory=redWineFactory;
}
@Override
public void product() {
redWineFactory.product();
System.out.println("代理转售");
}
}
客户
public class Client {
public static void main(String[] args) {
IRedWine redWine=new RealRedWineFactory();
RedWineProxy redWineProxy=new RedWineProxy(redWine);
redWineProxy.product();
}
}
输出结果
生产红酒
代理转售
按照代理的创建时期,代理类可以分为两种。
静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。
动态代理:在程序运行时,运用反射机制动态创建而成。
以上为静态代理
JDK中引入的动态代理机制:
抽象角色
public interface IRedWine {
public void product();
}
真实角色
public class RealRedWineFactory implements InvocationHandler{
/**
* description
* @param proxy 被代理的对象
* @param method 要调用的方法
* @param args 方法调用时所需要的参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("生产红酒");
System.out.println("代理转售");
return null;
}
}
客户
public class Client {
public static void main(String[] args) {
//真实角色
InvocationHandler invocationHandler=new RealRedWineFactory();
//创建代理对象
IRedWine redWine=(IRedWine) Proxy.newProxyInstance(IRedWine.class.getClassLoader(), new Class[]{IRedWine.class},invocationHandler);
redWine.product();
}
}
分享到:
相关推荐
设计模式-代理模式(讲解及其实现代码)
java常用设计模式-代理模式
设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式设计模式--代理模式
Java设计模式,代理模式,包含动态代理的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂
Java 设计模式 代理模式介绍,含源码
基于Java的设计模式——代理模式demo的实现(高分课设)个人经导师指导并认可通过的98分大作业设计项目,适用人群:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业或毕业设计,作为“参考资料”使用...
自己写的Java的代理模式的实现,有兴趣的可以下载看看
JAVA-设计模式-结构型模式-代理模式
c++设计模式-结构型模式-代理模式,qt工程,c++源码,简单示例
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
动态代理设计模式-源码
设计模式专题之(六)代理模式---设计模式代理模式示例代码(python--c++)
设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者模式、状态模式 设计模式16-策略...
java模式设计-代理模式之动态代理.ppt
java设计模式视频教程-代理模式, 深层了解java的设计模式
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...
java 模式 设计 代理模式 ,动态代理跟反射机制的内容相关
1.1 什么是设计模式 2 1.2 Smalltalk MVC 中的设计模式 3 1.3 描述设计模式 4 1.4 设计模式的编目 5 1.5 组织编目 7 1.6 设计模式怎样解决设计问题 8 1.6.1 寻找合适的对象 8 1.6.2 决定对象的粒度 9 1.6.3 指定对象...
意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些...