模式结构
模式分析
抽象主题类声明了真实主题类和代理类的公共方法,它可以是接口、抽象类或具体类,客户端针对抽象主题类编程,一致性地对待真实主题和代理主题,典型的抽象主题类代码如下:
public interface AbstractSubject
{
public void request();
}
真实主题类继承了抽象主题类,提供了业务方法的具体实现,其典型代码如下:
public class RealSubject implements AbstractSubject
{
public void request()
{
//业务方法具体实现代码
}
}
代理类也是抽象主题类的子类,它维持一个对真实主题对象的引用,调用在真实主题中实现的业务方法,在调用时可以在原有业务方法的基础上附加一些新的方法来对功能进行扩充或约束,最简单的代理类实现代码如下:
public class Proxy implements AbstractSubject
{ private RealSubject realsubject = new RealSubject(); //维持一个对真实主题对象的引用
public void prerequest()
{ …... }
public void request()
{
prerequest();
realsubject.request(); //调用真实主题对象的方法
postrequest();
}
public void postrequest()
{ …… }
}