设计模式--代理模式

来源:互联网 发布:旋风十一人网络更新 编辑:程序博客网 时间:2024/06/07 13:07

代理模式的英文原文是: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;}//在原方法的基础上增加方法@Overridepublic void request() {this.beforeRequest();subject.request();this.afterRequest();}//请求前的操作private void beforeRequest(){//预处理}//请求后的操作private void afterRequest(){//处理结束}}

代理模式的优点:

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

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

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

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

实现效果:

0 1
原创粉丝点击