标签:style class blog code java http
代理模式:为其他对象提供一种代理以控制对这个对象的访问
简单描述:1个父类A(或者接口),1个具体执行动作的子类,1个代理类,代理类持有具体子类的引用,在方法中调用具体子类的对象方法。客户端只与代理类交互
大话设计模式中的截图:
例子代码:
Subject类:
1 package com.longsheng.proxy; 2 3 public interface IGiveGifts { 4 5 public void giveDolls(); 6 7 public void giveFlowers(); 8 9 public void giveChocolate(); 10 11 }
RealSubject类:
1 package com.longsheng.proxy; 2 3 public class Pursuit implements IGiveGifts { 4 5 SchoolGirl sg; 6 7 public Pursuit(SchoolGirl sg) { 8 this.sg = sg; 9 } 10 11 @Override 12 public void giveDolls() { 13 System.out.println(sg.getName() + ", 送你玩具"); 14 } 15 16 @Override 17 public void giveFlowers() { 18 System.out.println(sg.getName() + ", 送你鲜花"); 19 } 20 21 @Override 22 public void giveChocolate() { 23 System.out.println(sg.getName() + ", 送你巧克力"); 24 } 25 26 }
Proxy类:
1 package com.longsheng.proxy; 2 3 public class Proxy implements IGiveGifts { 4 5 private Pursuit p; 6 7 public Pursuit getP() { 8 return p; 9 } 10 11 public void setP(Pursuit p) { 12 this.p = p; 13 } 14 15 public Proxy(SchoolGirl sg) { 16 this.p = new Pursuit(sg); 17 } 18 19 @Override 20 public void giveDolls() { 21 if( p != null ) { 22 p.giveDolls(); 23 } 24 } 25 26 @Override 27 public void giveFlowers() { 28 if( p != null ) { 29 p.giveFlowers(); 30 } 31 } 32 33 @Override 34 public void giveChocolate() { 35 if( p != null ) { 36 p.giveChocolate(); 37 } 38 } 39 40 }
其他类:
1 package com.longsheng.proxy; 2 3 public class SchoolGirl { 4 5 private String name; 6 7 public String getName() { 8 return name; 9 } 10 11 public void setName(String name) { 12 this.name = name; 13 } 14 15 }
客户端:
1 package com.longsheng.proxy; 2 3 public class Client { 4 5 public static void main(String[] args) { 6 SchoolGirl sg = new SchoolGirl(); 7 sg.setName("李娇娇"); 8 Proxy p = new Proxy(sg); 9 p.giveDolls(); 10 p.giveFlowers(); 11 p.giveChocolate(); 12 } 13 14 }
代理模式的使用场景
(1)远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实
(2)虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象(例如浏览器下载图片的问题)
(3)安全代理,用来控制真实对象访问时的权限,一般用于对象应该具有不同的访问权限的时候
(4)智能指引,是指当调用真实的对象时,代理处理另外一些事情(如计算真实对象的引用次数,如果没有引用了,可以释放对象)
大话设计模式_代理模式(Java代码),布布扣,bubuko.com
标签:style class blog code java http
原文地址:http://www.cnblogs.com/creasylai19/p/3772984.html