代理模式-----结构型模式
转:
代理对象:为其他对象提供代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象,创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加 一些额外的功能。
模式中包含的角色以及职责
subject:抽象的主题类,是一个最普通的业务类型定义,无特殊要求;
RealSubject:具体主题角色,也叫被委托角色(被代理角色),是业务逻辑的具体执行者;
proxy:代理主题角色,也叫委托类或代理类。它把所有抽象主题类定义的方法给具体这主题方法实现,并且在具体主题执行前面做预处理或善后工作。
###抽象的主题
public interface Subject{
public void operation();
}
###具体实现执行类
public class RealSubject implements Subject{
@Override
public void operation(){
system.out.println("realSubject operation run");
}
}
###代理proxy
public class Proxy implements Subjects{
private Subject subject;
public Proxy(Subject subject){
this.subject = subject;
}
@Override
public void operation(){
System.out.println("before operate......");
subject.operation();
System.out.println("after operate......");
}
##Client
/**
* 客户
*/
publicclass Client {
/**
* @param args
*/
publicstaticvoid main(String[] args) {
Subject subject = new RealSubject();
Proxy proxy = new Proxy(subject);
proxy.operate();
}
}
}
在我们程序设计中也可使用代理模式来将由一系列无关逻辑组合在一起的代码进行解耦合,比如业务代码中的日志代码就可以在代理中进行。Spring的AOP就是典型的动态代理应用。