例:
// 抽象角色
abstract public class Subject
{
abstract public void request();
}
//真實(shí)角色:實(shí)現(xiàn)了Subject的request()方法
public class RealSubject extends Subject
{
public RealSubject()
{
}
public void request()
{
System.out.println("From real subject.");
}
}
//代理角色
public class ProxySubject extends Subject
{
private RealSubject realSubject; // 以真實(shí)角色作為代理角色的屬性
public ProxySubject()
{
}
public void request() // 該方法封裝了真實(shí)對(duì)象的request方法
{
preRequest();
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.request(); // 此處執(zhí)行真實(shí)對(duì)象的request方法
postRequest();
}
private void preRequest()
{
// something you want to do before requesting
}
private void postRequest()
{
// something you want to do after requesting
}
}
//客戶端調(diào)用
public class Client
{
public static void main(String[] args)
{
Subject sub = new ProxySubject();
sub.request();
}
}