本文共 2073 字,大约阅读时间需要 6 分钟。
代理模式:为其它对象提供一种代理,以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在 客户端和目标对象之间起到中介的作用。
/** * Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何 * 使用RealSubject的地方都可以使用Proxy. * */public abstract class Subject { public abstract void request();}
/** * RealSubject类,定义Proxy所代表的真实实体。 * */public class RealSubject extends Subject { @Override public void request() { System.out.println("真实的请求。"); }}
/** * Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject接口相同的接口, * 这样代理就可以用来代替实体。 * */public class Proxy extends Subject { // 真实实体 private RealSubject realSubject; @Override public void request() { if(realSubject == null){ realSubject = new RealSubject(); } realSubject.request(); }}
public class Main { public static void main(String[] args) { // 代理类 Proxy proxy = new Proxy(); proxy.request(); }}
代理模式事例:(代追求者送礼物)
/** * 代理接口(送礼物) * */public interface GiveGift { // 送洋娃娃 public void giveDolls(); // 送鲜花 public void giveFlowers(); // 送巧克力 public void giveChocolate();}
/** * 追求者类(真实的实体),实现送礼物接口 * */public class Pursuit implements GiveGift { // 被追求者 private SchoolGirl mm; public Pursuit(SchoolGirl mm){ this.mm = mm; } public void giveChocolate() { System.out.println(mm.getName()+"送你巧克力"); } public void giveDolls() { System.out.println(mm.getName()+"送你洋娃娃"); } public void giveFlowers() { System.out.println(mm.getName()+"送你鲜花"); }}
/** * 代理类,也实现送礼物的接口 * */public class Proxy implements GiveGift { // 真实的实体追求者 private Pursuit gg; public Proxy(SchoolGirl mm){ gg = new Pursuit(mm); } public void giveChocolate() { // 在实现方法中调用追求者类的相关方法 gg.giveChocolate(); } public void giveDolls() { gg.giveDolls(); } public void giveFlowers() { gg.giveFlowers(); }}
/** * 被追求者类 * */public class SchoolGirl { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
public class Main { public static void main(String[] args) { SchoolGirl mm = new SchoolGirl(); mm.setName("娇娇"); Proxy proxy = new Proxy(mm); proxy.giveChocolate(); proxy.giveChocolate(); proxy.giveFlowers(); }}
输出结果如下:
娇娇送你巧克力娇娇送你巧克力娇娇送你鲜花
转载地址:http://oyxmb.baihongyu.com/