1.代理模式作用:
为其他对象提供一种代理以控制对这个对象的访问。(类似中介,可以为你做事,也同时实现自己的事。例如找房子,中介可以实现租房,同时中介可以收取一定费用)代理访问你要访问对象(中介代替租房者去访问房东租房)。
2.代理角色:
-
抽象角色:声明真实对象和代理对象的共同接口。(例如租房(租房是接口的一个行为),中介和房东都能完成租房的这个动作)
-
代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以再执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。(中介就是代理角色)
-
真实角色:代理角色所代表的真实对象,是最终要引用的对象。(真实角色是房东)
package com.test.proxy;
/**
* 定义一个抽象类,静态代理模式可以使用接口或者抽象类
* @author 守望幸福
*
*/
public abstract class Subject {
public abstract void request();
}
package com.test.proxy;
/**
* 代理类实现Subject抽象类,同时拥有真实对象的引用(private RealSubject realSubject;)
* 代理必须完成真实对象的动作,也可以添加自己的动作。
* @author 守望幸福
*
*/
public class ProxySubject extends Subject {
private RealSubject realSubject;//代理角色内部引用真实角色
@Override
public void request() {
this.perRequest();//调用真实类之前调用
if(realSubject==null){
realSubject=new RealSubject();
realSubject.request();//真实角色完成的事情
}
this.postRequest();//调用真实类之后调用
}
private void perRequest(){
System.out.println(" per Request!");
}
private void postRequest(){
System.out.println(" post Request!");
}
}
package com.test.proxy;
/**
* 真实类实现接口(Subject)
* @author 守望幸福
*
*/
public class RealSubject extends Subject{
@Override
public void request() {
System.out.println("from realSubject");
}
}
package com.test.proxy;
/**
* 客户端调用类
* @author 守望幸福
*
*/
public class Client {
public static void main(String[] args) {
Subject s=new ProxySubject();
s.request();
}
}
从上例可以观察出,客户实际需要调用的是RealSubject类的request方法,现在通过代理类ProxySubject来代理真实类,也能同样达到调用request的目的 ,同时还封装了其他的方法preRequest、postRequest,来出来另外的问题。
如果按照上诉的方使用代理模式,那么真实角色必须是实现已存在,并将其作为代理对象的内部属性。事实上,一个真实角色必须对应一个代理角色,如果大量使用会导致类的急剧膨胀,而且无法处理事先未知的真实角色。上述问题可以通过动态代理
来解决。
分享到:
相关推荐
Java 代理模式: 详见:http://blog.csdn.net/q610098308/article/details/74144046
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
NULL 博文链接:https://871656094.iteye.com/blog/2355335
这里提供了静态代理和动态代理的入门写法~一看即懂!
- 代理模式 - 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事...
在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定代理类和被代理类的关系,需要手动编写代理类。代理类需要实现与被代理类相同的接口,并且在代理类中持有一个被...
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理)
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理
java设计模式【之】静态代理【源码】【场景:帮爸爸买菜】.rar * 代理模式 * 在开发者的角度来看,创建一个代理对象,提供给用户使用,避免用户直接访问真正的对象 * 在用户角度来看,就是普通的类方法调用 * ...
Java代理模式模板代码,包含动态代理与静态代理。 静态代理使用了传统的代理类来代理,动态代理中使用了jdk的反射原理进行代理
代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个...
Java各种代理模式以及AOP的实现代码 : 1.AspectJ - 静态代理 2. 动态代理 (1)JDK动态代理 (2)CGlib代理
Java编程模式-代理模式。介绍了静态代理模式和动态代理模式
静态代理代理模式,顾名思义就是提供一个代理类,可以访问原对象并且替原对象进行一些操作。 优点:使用代理模式可以在保证不修改原有类的同时(即满足对扩展开放,对修改关闭的原则),对原有类增加一些功能实现。
代理模式的小案例,静态代理和动态代理都有。不想写代码的可以下载下来看看。
1:静态代理出现的实际背景,静态代理时如何演化成动态代理 2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic进行通信) 3: 动态代理使用到基础理论:ClassLoader 加载.class字节码...
java静态代理设计模式,学习记录,简单自定义注解编写