代理模式被收录于设计模式,属于结构行模式,其目的是为其他对象提供一种代理,以控制对这个对象的访问.
第一个代理模式的例子
//定义代理
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
}
}
本文介绍了设计模式中的代理模式,通过一个具体实例展示了如何为一个对象创建代理以控制对该对象的访问。代理模式通常包括一个主体接口及其实现者(真实主题)和代理类,代理类持有真实主题的引用,并在调用真实主题的方法之前或之后执行额外的操作。
104

被折叠的 条评论
为什么被折叠?



