资源描述:
《Proxy Design Pattern(代理设计模式)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、代理模式:给某一对象提供代理对象,并由代理对象控制具体对象的引用。 代理模式涉及的角色: 1:抽象主题角色.声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 2:代理主题角色.含有真实主题的引用,从而可以在任何时候操作真实主题,代理主题功过提供和真实主题相同的接口,使它可以随时代替真实主题.代理主题通过持有真实主题的引用,不但可以控制真实主题的创建或删除,可以在真实主题被调用前进行拦截,或在调用后进行某些操作. 3:真实代理对象.定义了代理角色所代表的具体对象. 我们可以用客户买
2、红酒来模拟代理模式的实现 红酒代理商和红酒厂商都有销售红酒的ke能,我们可以为他们定义一个共同的抽象主题角色, 2 *抽象主题角色,定义了真实角色和代理角色的公共接口 3 */ 4 public interface SellInterface{ 5 public Object sell(); 6 } 接着,我们定义真实主题角色(这里就是红酒工厂),它必须实现了SellInterface接口的. 2 *真实主题角色,这里指红酒工厂角色,它实现了SellInterface接口 3 */ 4 pu
3、blic class RedWineFactory implements SellInterface{ 5 public Object sell(){ 6 System.out.println("真实主题角色RedWineFactory 被调用了"); 7 return new Object(); 8 } 9 } 接着,我们定义真实主题角色(这里就是红酒工厂),它必须实现了SellInterface接口的. 1./** 2.*真实主题角色,这里指
4、红酒工厂角色,它实现了SellInterface接口 3.*/ 4.public class RedWineFactory implements SellInterface{ 5. public Object sell(){ 6. System.out.println("真实主题角色RedWineFactory 被调用了"); 7. return new Object(); 8. } 9.} 下面是代理主题角色(这里指红酒代理商),同样,代理主题也
5、必须实现SellInterface接口. 1./** 2.*代理主题角色,这里指红酒代理商.它除了也要实现了sellInterface接口外,还持有红酒 3.*厂商RedWineFactory 对象的引用,从而使它能在调用真实主题前后做一些必要处理. 4.*/ 5.public class RedWineProxy implements SellInterface{ 6. //持有一个RedWineFactory对象的引用 7. private RedWineFactory redWin
6、eFactory; 8. 9. //销售总量 10. private static int sell_count = 0; 11. 12. public Object sell(){ 13. if(checkUser()){//在通过代理主题角色,我们可以在真实主题角色被调用前做一些诸如权限判断的事情 14. Object obj = redWineFactory.sell(); 15. count ++;/
7、/同样,在调用后我们也可以执行一些额外的动作. 16. return obj ; 17. }else{ 18. throw new RuntimeException(); 19. } 20. } 21. 22. protected boolean checkUser(){ 1. //do something 2. return true; 3. }
8、 4.} 接下来看看调用代理对象的代码 1.public static void main(String agr[]) 2.{ 3. SellInterface sell = new RedWineProxy(); 4. sell.sell(); 5.} 从上面的例子可以看出代理模式的工作方式,首先,因为代理主题和真实主题都实现了共同的接口,