本文共 1968 字,大约阅读时间需要 6 分钟。
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
该程序主要通过模拟代理追求女生的功能实现。
1、统一接口类
public interface GiveGift { void giveDolls(); void giveFlowers(); void giveChocolate();}
2、追求者类
public class Pursuer implements GiveGift { SchoolGirl schoolGirl; public Pursuer(SchoolGirl schoolGirl){ this.schoolGirl = schoolGirl; } @Override public void giveDolls() { System.out.println(schoolGirl.getName() + ",送你娃娃!"); } @Override public void giveFlowers() { System.out.println(schoolGirl.getName() + ",送你鲜花!"); } @Override public void giveChocolate() { System.out.println(schoolGirl.getName() + ",送你巧克力!"); }}
3、代理
public class Proxy implements GiveGift { Pursuer pursuer; public Proxy(SchoolGirl schoolGirl){ this.pursuer = new Pursuer(schoolGirl); } @Override public void giveDolls() { pursuer.giveDolls(); } @Override public void giveFlowers() { pursuer.giveFlowers(); } @Override public void giveChocolate() { pursuer.giveChocolate(); }}
4、被追求者
public class SchoolGirl { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
5、测试
public class Test { public static void main(String[] args) { SchoolGirl sg = new SchoolGirl(); sg.setName("娇娇"); Proxy proxy = new Proxy(sg); proxy.giveDolls(); proxy.giveFlowers(); proxy.giveChocolate(); }}输出:娇娇,送你娃娃!娇娇,送你鲜花!娇娇,送你巧克力!
当需要为一个对象再不同的地址空间提供局部的代表时
此时的代理模式称为远程代理:为一个对象在不同的地址空间提供局部代表。目的:
- 隐藏一个对象存在于不同地址空间的事实;
- 远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
当需要创建开销非常大的对象时
此时的代理模式称为虚拟代理:通过使用过一个小的对象代理一个大对象。目的:减少系统的开销。
目的:用来控制对真实对象的访问权限
注:参考文献《大话设计模式》程杰著。