代理模式java源码实现(大话设计模式学习备忘录)
public class SchoolGirl {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}}
//追求者public class Pursuit {SchoolGirl mm;public Pursuit(SchoolGirl mm){this.mm=mm;}public void giveDolls(){System.out.println(mm.getName()+"送你洋娃娃");}public void giveFlowers(){System.out.println(mm.getName()+"送你鲜花");}public void giveChocolate(){System.out.println(mm.getName()+"送你巧克力");}}
/** * <h1>代理模式</h1> * QS:卓贾易找戴励代理和李娇娇谈恋爱 * @author xangqun * */public class Program {/**PS: * 这里成了卓贾易和李娇娇谈恋爱了,不合题 * @param args */public static void main(String[] args) {SchoolGirl jiaojaio=new SchoolGirl();jiaojaio.setName("李娇娇");Pursuit zhuojiayi=new Pursuit(jiaojaio);zhuojiayi.giveDolls();zhuojiayi.giveFlowers();zhuojiayi.giveChocolate();}}
public interface IGiveGift {void GiveDolls();void GiveFlowers();void GiveChocolate();}
public class PursuitTwo implements IGiveGift {SchoolGirl mm;public PursuitTwo(SchoolGirl mm){this.mm=mm;}@Overridepublic void GiveChocolate() {System.out.println(mm.getName()+"送你巧克力");}@Overridepublic void GiveDolls() {System.out.println(mm.getName()+"送你洋娃娃");}@Overridepublic void GiveFlowers() {System.out.println(mm.getName()+"送你鲜花");}}
public class Proxy implements IGiveGift {PursuitTwo gg;public Proxy(SchoolGirl mm){gg=new PursuitTwo(mm);}@Overridepublic void GiveChocolate() {gg.GiveChocolate();}@Overridepublic void GiveDolls() {gg.GiveDolls();}@Overridepublic void GiveFlowers() {gg.GiveFlowers();}}
package com.xangqun.proxy;/** * <h1>代理模式</h1> * QS:卓贾易找戴励代理和李娇娇谈恋爱 * @author xangqun * */public class ProgramTwo {/**<b>代理模式(proxy)<b> * 为其他对象提供一种代理以控制对这个对象的访问 * <ul> * <li>远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实</li> * <li>虚拟代理,是根据需要创建开销很大的对象,通常它在存放实例化需要很长时间的真实对象</li> * <li>安全代理,用来控制真实对象访问时的权限</li> * <li>智能指引,是指当调用真实的对象时,代理处理另外一些事</li> * </ul> * @param args */public static void main(String[] args) {SchoolGirl jiaojaio=new SchoolGirl();jiaojaio.setName("李娇娇");Proxy daili=new Proxy(jiaojaio);daili.GiveDolls();daili.GiveFlowers();daili.GiveChocolate();}}