代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
代理模式是对象间的间接通信,间接通信可以给出较低的耦合关系,较强的合作关系,以及微妙的结构和易于复用的设计架构。
代理模式的结构:
抽象主题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题。
代理主题角色:代理主题角色内部有对真实主题的易用,从而可以在任何时候操作真实主题对象。
真实主题角色:定义了代理角色所代表的真实对象
红酒代理商和红酒厂商都有销售红酒的职能
**
*抽象主题角色,定义了真实角色和代理角色的公共接口
*/
public interface SellInterface{
public Object sell();
}
/**
*真实主题角色,这里指红酒工厂角色,它实现了SellInterface接口
*/
public class RedWineFactory implements SellInterface{
public Object sell(){
System.out.println("真实主题角色RedWineFactory 被调用了");
return new Object();
}
}
/**
*代理主题角色,这里指红酒代理商.它除了也要实现了sellInterface接口外,还持有红酒
*厂商RedWineFactory 对象的引用,从而使它能在调用真实主题前后做一些必要处理.
*/
public class RedWineProxy implements SellInterface{
//持有一个RedWineFactory对象的引用
private RedWineFactory redWineFactory;
//销售总量
private static int sell_count = 0;
public Object sell(){
if(checkUser()){//在通过代理主题角色,我们可以在真实主题角色被调用前做一些诸如权限判断的事情
Object obj = redWineFactory.sell();
count ++;//同样,在调用后我们也可以执行一些额外的动作.
return obj ;
}else{
throw new RuntimeException();
} }
protected boolean checkUser(){
//do something
return true;
}
}
public static void main(String agr[]) {
SellInterface sell = new RedWineProxy();
sell.sell();
}