设计模式:代理模式(Proxy)

代理模式:为其他对象提供一种代理以控制对这个对象的访问

仅仅一句话自然是说明不了代理模式是什么,我们先看看代码例子,什么是代理:

举一个栗子吧,假设有个人家里有困难,A同学知道了这个人的情况,想捐点钱给他,但是又想做好事不留名,于是A同学让B同学帮忙把钱给这个人。


那么我们先建一个People类:

class People {
	String name;

	People(String name) {
		this.name = name;
	}
}

然后写一个代理接口,我们这个栗子围绕捐钱,所以这个接口有一个送钱的方法:

interface Proxy {
	void giveMoney();
}

两个同学分别实现该接口:

class StudentA implements Proxy {
	private Proxy p;

	StudentA(People pople) {
		this.p = new StudentB(pople);
	}

	@Override
	public void giveMoney() {
		p.giveMoney();
	}

}

class StudentB implements Proxy {
	People p;

	StudentB(People p) {
		this.p = p;
	}

	@Override
	public void giveMoney() {
		System.out.println(p.name+"钱给你,不用谢,我叫红领巾");
	}

}

然后调用:

public static void main(String[] args) {
		//这个有困难的人叫做大众脸
		People dazhonglian=new People("大众脸");
		StudentA a=new StudentA(dazhonglian);
		a.giveMoney();
	}

运行结果:

大众脸,钱给你,不用谢,我叫红领巾


这下b同学不用直接给大众脸送钱了~


我们把同学A叫做代理,同学B叫做真实需求。AB都实现了Proxy,这样就可以在使用真实需求的时候,调用代理。


代理模式一般会在一下几个场合用到:

1.远程代理,为一个对象在不同的地址空间提供局部代表。这样就可以隐藏一个对象存在于不同地址空间的事实。

2.虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化很长的真实对象。在真实对象还没有完全实例化之前,可以先用代理对象代替。

3.安全代理,用来控制真实对象访问时的权限。

4.智能指引,当调用真实对象时,代理处理另外一些事情。


代理对象就是真是对象的代表。











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值