代理模式被收录于设计模式,属于结构行模式,其目的是为其他对象提供一种代理,以控制对这个对象的访问.
第一个代理模式的例子
//定义代理
package pattern.proxy;
public class Proxy extends Subject {
/*
* 持有一个实体引用使得代理可以访问实体
*/
private Subject subject;
/*
* 使用抽象实体来初始化代理对象
*/
public Proxy(Subject subject) {
this.subject = subject;
}
/*
* 提供一个与Subject的接口相同的接口 控制对实体的存取,并可能负责创建和删除它
*/
@Override
public void request() {
beforeRequest();
// 在真正发出请求时,创建实体对象
if (subject == null) {
subject = new RealSubject();
}
subject.request();
afterRequest();
}
/*
* 前操作
*/
private void beforeRequest() {
System.out.println("do sth before");
}
/*
* 后操作
*/
private void afterRequest() {
System.out.println("do sth after");
}
}
//定义RealSubject 与Proxy的公用接口,在任何使用RealSubject的地方都可以使用Proxy
package pattern.proxy;
public abstract class Subject {
/*
* 实体的业务请求
*/
public abstract void request();
}
//定义Proxy所代理的实体
package pattern.proxy;
public class RealSubject extends Subject {
@Override
public void request() {
// TODO Auto-generated method stub
}
}
第一个代理模式的例子
//定义代理
package pattern.proxy;
public class Proxy extends Subject {
/*
* 持有一个实体引用使得代理可以访问实体
*/
private Subject subject;
/*
* 使用抽象实体来初始化代理对象
*/
public Proxy(Subject subject) {
this.subject = subject;
}
/*
* 提供一个与Subject的接口相同的接口 控制对实体的存取,并可能负责创建和删除它
*/
@Override
public void request() {
beforeRequest();
// 在真正发出请求时,创建实体对象
if (subject == null) {
subject = new RealSubject();
}
subject.request();
afterRequest();
}
/*
* 前操作
*/
private void beforeRequest() {
System.out.println("do sth before");
}
/*
* 后操作
*/
private void afterRequest() {
System.out.println("do sth after");
}
}
//定义RealSubject 与Proxy的公用接口,在任何使用RealSubject的地方都可以使用Proxy
package pattern.proxy;
public abstract class Subject {
/*
* 实体的业务请求
*/
public abstract void request();
}
//定义Proxy所代理的实体
package pattern.proxy;
public class RealSubject extends Subject {
@Override
public void request() {
// TODO Auto-generated method stub
}
}