之前写了一篇工厂方法模式的文章,本来还想写抽象工厂模式的,但是感觉抽象工厂模式就是工厂方法模式的扩展。就不写了,这里来谈一下代理。代理模式在很多地方都有应用,比如说java的动态代理,CGLIB代理,以及Spring 的AOP等等。
1.代理模式
简单的说,就是为其他对象来提供一个代理,来控制对该对象的访问。
2.代理模式的三大角色
抽象主题角色:是真实主题角色和代理主题角色的共同接口
真实主题角色:是具体业务逻辑的实现
代理主题角色:负责在需要的时候去创建或者删除真实主题角色,并在真实主题角色之前或之后做工作
3.具体实现
抽象主题角色
package com.test;
public interface Subject {
void operation();
}
真实主题角色
package com.test;
public class TrueSubject implements Subject{
public void operation() {
System.out.println("--------真正要做的东西--------");
}
}
代理主题角色
package com.test;
public class ProxySubject implements Subject {
private Subject subject;
public ProxySubject(Subject subject) {
this.subject = subject;
}
public void operation() {
this.operationBefore();
subject.operation();
this.operationafter();
}
public void operationBefore()
{
System.out.println("------在代理前处理的事件---------");
}
public void operationafter()
{
System.out.println("------在代理后处理的事件---------");
}
}
测试
package com.test;
public class Test {
public static void main(String[] args) {
Subject ss = new TrueSubject();
ProxySubject p = new ProxySubject(ss);
p.operation();
}
}