代理模式:为其他对象提供一种代理以控制对这个对象的访问。
代理模式是比较有用途的一种模式,而且变种较多,应用场合覆盖从小结构到整个系统的大结构,Proxy 是代理的意思,我们
也许有代理服务器等概念,代理概念可以解释为:在出发点到目的地之间有一道中间层,意为代理.
我们以火车站买车票为例子:里面涉及到几个角色。你:执行角色,买车票:抽象角色,黄牛党;代理角色。还有几个主题:买车票是主题,车站买车票是真实的主题,而黄牛党去车站替你买车票是做的代理。
/**
主题:买车票
**/
public interface Subject { //抽象主题
public abstract void sealTicket();
}
/**
真实主题:火车站-售票
**/
public class RealSubject implements Subject {//真实主题
@Override
public void sealTicket() {
// TODO Auto-generated method stub
System.out.println(this.getClass().getName()+":火车站-买票!");
}
}
/**
代理
**/
public class ProxySubject implements Subject {
private Subject subject;
ProxySubject(Subject subject){
this.subject = subject;
}
@Override
public void sealTicket() {
// TODO Auto-generated method stub
inStation();
this.subject.sealTicket();
outStation();
}
private void inStation(){
System.out.println(this.getClass().getName()+":黄牛党,拿着你的钱,去大厅买车票!");
}
private void outStation(){
System.out.println(this.getClass().getName()+":黄牛党买好车票从大厅出来,把车票交给你!");
}
}
/**
测试类
**/
public class TestProxy{
public static void main(String args[]){
Subject subject = new ProxySubject(new RealSubject());
subject.sealTicket():
}
}
结果如下:
test.ProxySubject::黄牛党,拿着你的钱,去大厅买车票!
test.RealSubject:火车站-买票!
test.ProxySubject:黄牛党买好车票从大厅出来,把车票交给你!