设计模式之代理模式

这一篇记录的是设计模式中的代理模式,想象一下生活中租房子的例子,房东出租房子,一般会由中介来替房东出租,中介会收取手续费,这里的中介就相当于代理,租房子的人不可以直接联系房东,而是由中介联系,代理模式就是这么一种模式。

§ 个客户不想或者不能够直接引用一个对象,而 代理对象 可以在客户端和目标对象之间起到中介的作用,去掉客户不能 看到 的内容和服务或者增添客户需要的额外服务。如在网页上查看一 张图片 ,由于网速等原因图片不能立即显示,我们可以在图片传输 过程中 先把一些简单的用于描述图片的文字传输到客户端,此时这些 文字就 成为了图片的代理。

§ 代理模式 (Proxy Pattern) :给某一个对象提供一个代理,并由代理 对象控制 对原对象的引用。代理模式的英文叫做 Proxy Surrogate 。代理 模式 是一种对象结构型模式。

下面用代码来实现代理模式的demo:

Subject类是一个抽象的主题角色,对应于上面租房子的例子中的出租这个主题,中介和房东都有出租房子的方法,下面就是Subject类的代码:

package com.proxy;

//抽象主题角色
public interface Subject {
	
	//出租房子
	void rentHouse();

}
房东和中介都可以出租房子,所以房东和中介都必须实现上面的Subject接口,下面是房东的代码:

package com.proxy;

//房东,可以对外出租房子
public class Landlord implements Subject {

	@Override
	public void rentHouse() {
		System.out.println("我是房东,我有房子要出租");
	}

}
中介由于代替房东出租房子,所以中介类中应该包含了对房东的引用,代码如下:

package com.proxy;

//房东的代理,可以替房东出租房子
public class Proxy implements Subject {
	//包含了对房东对象的引用,中介出租房子时,就调用房东的租房子的方法
	private Landlord landlord;
	
	public Proxy(Landlord landlord){
		this.landlord = landlord;
	}

	@Override
	public void rentHouse() {
		//调用房东租房子的方法,完成代理
		landlord.rentHouse();
	}

}
下面是测试代码:

package com.proxy;

public class Test {
	
	public static void main(String[] args) {
		Landlord landlord = new Landlord();
		Proxy proxy = new Proxy(landlord);
		proxy.rentHouse();
	}

}

代理模式的 优点 如下:
§ 代理 模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度。
§ 对象在远程机器上,要通过网络来生成时速度可能会很慢,此时应用代理 模式 可以掩盖对象在网络上生成的过程,系统的速度会加快。
§ 对于 大对象的 加载 ( 图片 ) 虚拟代理可以让加载过程在后台执行, 前台使用 的代理对象会使得整体运行速度得到优化。

§ 代理 模式的缺点是请求的处理速度会变慢 ,并且 实现代理模式需要额外的 工作

§ 代理有以下几种:
§ 远程 Remote )代理
§ 虚拟 Virtual )代理
§ 保护 Protector Access )代理
§ 缓冲 Cache )代理
§ 防火墙 Firewall )代理
§ 同步化 Synchronization )代理
§ 智能 引用( SmartReference )代理
§ 图片代理 AOP(Aspect Oriented Programming)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yubo_725

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值