追女孩别用代理模式

一.场景

“娇娇同学,这是有人送你的礼物”,一个男生拿着一束花

“戴笠同学,这是什么意思”娇娇看着这个同班的男同学

“是这样的,我的朋友隔壁三班卓一航,让我代送个礼物”,戴笠有点脸红

“为什么要送我礼物,我不认识他啊”

“他说..他说想和你交个朋友”,戴笠抓抓后脑勺,说话吞吞吐吐。

“不用这样的,我不需要礼物”娇娇显然想拒绝

“别别别,他是我好朋友,他拜托我送你礼物也是下了很大决心的,你看我平常给你讲数学题的份上,就收下吧”戴笠有些着急

“那好吧,今天我对椭圆几何解析还不太懂,你再帮我讲讲”娇娇提出条件后接下礼物

“没问题”戴笠松了口气

...
几天后

“娇娇,这是卓一航送你的花”

...

“娇娇,这是卓一航送你的巧克力”

“我不想要他的礼物了,我不想和他做朋友,我想...我想和你做朋友!”娇娇说

“啊...我不是在做梦吧!”喜从天降,戴笠不敢相信...

“其实我也很喜欢ni....”戴笠抓抓头

从此娇娇和戴笠恋爱了。

“咚!”黑板擦飞过来

数学老师:“上我的课还敢睡觉!”

是不是很狗血,卓一航是为别人做嫁衣,自己不主动,让别人代理谈恋爱

二.静态代理

1.实现

送礼物接口

public interface GiveGift {

	public void giveFlowers();
	
	public void giveChocolate();
	
	public void giveDolls();
}

追求者类

package Proxy;

public class Pursuit implements GiveGift{

	SchoolGirl girl ;
	
	String name;
	
	@Override
	public void giveFlowers() {
		System.out.println(girl.getName()+"送你花");
	}

	@Override
	public void giveChocolate() {
		System.out.println(girl.getName()+"送你巧克力");
	}
	
	@Override
	public void giveDolls() {
		System.out.println(girl.getName()+"送你娃娃");
	}

	public Pursuit(SchoolGirl girl, String name) {
		super();
		this.girl = girl;
		this.name = name;
	}

}

代理类

package Proxy;

public class Proxy implements GiveGift {
	
	private String name;
	
	Pursuit pursuit;

	@Override
	public void giveFlowers() {
		System.out.print("戴笠:");
		pursuit.giveFlowers();
	}

	@Override
	public void giveChocolate() {
		System.out.print("戴笠:");
		pursuit.giveChocolate();
	}

	@Override
	public void giveDolls() {
		System.out.print("戴笠:");
		pursuit.giveDolls();
	}

	public Proxy(String name, Pursuit pursuit) {
		super();
		this.name = name;
		this.pursuit = pursuit;
	}

}

女孩

package Proxy;

public class SchoolGirl {

	private String name;

	public SchoolGirl(String name) {
		super();
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
}

客户端

public static void main(String[] args) {
		SchoolGirl girl = new SchoolGirl("娇娇");
		
		Pursuit pursuit =  new Pursuit(girl, "卓一航");
		Proxy proxy = new Proxy("戴笠", pursuit);
		proxy.giveFlowers();
		proxy.giveChocolate();
		proxy.giveDolls();
	}

女孩不认识追求者,却通过代理拿到了礼物

2.使用场景

中介隔离作用:在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用,其特征是代理类和委托类实现相同的接口。

开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。例如我们想给项目加入缓存、日志这些功能,我们就可以使用代理类来完成,而没必要打开已经封装好的委托类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值