23种设计模式之——代理模式

来源:互联网 发布:seo教程网 编辑:程序博客网 时间:2024/05/20 13:06

1.定义

Provide a surrogate or placeholder for another object to control access to it.

为其他对象提供一种代理以控制对这个对象的访问。

2.释义


● Subject抽象主题角色
抽象主题类可以是抽象类也可以是接口,是一个最普通的业务类型定义,无特殊要求。

● RealSubject具体主题角色
也叫做被委托角色、被代理角色。它才是冤大头,是业务逻辑的具体执行者。

● Proxy代理主题角色
也叫做委托类、代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在真实主题角色处理完毕前后做预处理和善后处理工作。

3.通用代码

抽象主题类:

public interface Subject {    //定义一个方法    public void request();}

真实主题类:

public class RealSubject implements Subject {    //实现方法    public void request() {    //业务逻辑处理    }}

代理类:

public class Proxy implements Subject {    //要代理哪个实现类    private Subject subject = null;    //默认被代理者    public Proxy(){        this.subject = new Proxy();    }    //通过构造函数传递代理者    public Proxy(Object...objects ){    }    //实现接口中定义的方法    public void request() {        this.before();        this.subject.request();        this.after();    }    //预处理    private void before(){    //do something    }    //善后处理    private void after(){        //do something    }}

4.优点

● 职责清晰
真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。


● 高扩展性
具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,都逃不脱如来佛的手掌(接口),那我们的代理类完全就可以在不做任何修改的情况下使用。


这只是简单的代理模式概念,复杂的是动态代理,spring 的 aop就是动态代理实现的,现在只是理解其思想和用法,自己实现还很难,以后还需要更深入的学习(●'◡'●)


原创粉丝点击