设计模式--代理模式

代理模式的英文原文是:Provide a surrogate or placeholder for another object to control access to it.  意思是:为其他对象提供一种代理,以控制对这个对象的访问。

有以下三种角色:

1、抽象主题:是真实主题和代理主题的接口,代理主题要实现这个抽象主题,这样就可以使用代理主题代理真实主题。

2、真实主题:业务逻辑具体执行者,被代理的对象。

3、代理主题:该角色有真实主题的引用,可以在真实主题的操作前后增加操作。

代理模式的类图:


各个类对应的代码:

抽象主题:

package com.zz.proxy;
/**
 * 抽象主题
 * Copyright 2015年4月14日
 * created by txxs
 * all right reserved
 */
public interface Subject {
	//定义一个请求
	public void request();

}

真实主题:

package com.zz.proxy;
/**
 * 真实主题
 * Copyright 2015年4月14日
 * created by txxs
 * all right reserved
 */
public class RealSubject implements Subject {

	public void request() {
		//业务逻辑处理
	}

}

代理主题:

package com.zz.proxy;
/**
 * 代理主题
 * Copyright 2015年4月14日
 * created by txxs
 * all right reserved
 */
public class ProxySubject implements Subject {

	private Subject subject;
	public ProxySubject(Subject subject){
		this.subject = subject;
	}
	//在原方法的基础上增加方法
	@Override
	public void request() {
		this.beforeRequest();
		subject.request();
		this.afterRequest();
	}
	
	//请求前的操作
	private void beforeRequest(){
		//预处理
	}
	
	//请求后的操作
	private void afterRequest(){
		//处理结束
	}

}

代理模式的优点:

1、职责清晰:真实角色可以只实现实际的业务逻辑,不用实现非本职的业务,通过代理来实现后续业务的添加,是编程逻辑清晰。

2、高扩展性:真实角色是要实现了公共的接口,代理对象就可以代理真实角色。

3、灵活:代理类可以在运行时才确定代理的真实角色。

通过一个实例来应用代理模式———房屋出租。拥有房源的用户进行房屋出租,其有两个方法一个是goBargain()方法用来商议价格,另一个方法是houseRental()方法是定价完成后进行出租。拥有房源的用户实现了房屋出租的接口,这里有一个房屋出租中介,这个中介同样实现了房屋出租的接口。这个中介就可以代理这些房屋。源码下载

实现效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值