`

设计模式之代理模式三段论

 
阅读更多

抽象角色类:

 

package com.test.proxy;
 
public abstract class Subject {
/**
* 抽象角色,声明真实对象和代理对象的共同接口。
*/
public abstract void request();
 
}

 

 

 

代理角色类:

 

package com.test.proxy;
 
public class ProxySubject extends Subject {
/**
* 代理角色,代理对象角色内部含有对真实对象的引用。
*/
private RealSubject realSubject;
@Override
public void request() {
this.preRequest();
// TODO Auto-generated method stub
if(null == realSubject)
{
realSubject = new RealSubject();
}
realSubject.request();
this.postRequest();
}
private void preRequest()
{
System.out.println("pre request");
}
private void postRequest()
{
System.out.println("post Request");
}
}

 

 

真实角色类:

 

package com.test.proxy;
 
public class RealSubject extends Subject {
/**
* 真实角色,代理角色所代表的真实对象,是我们最终要引用的对象。
*/
 
@Override
public void request() {
// TODO Auto-generated method stub
System.out.println("from real subject");
 
}
 
}

 

 

测试类:

 

package com.test.proxy;
 
public class Client {
 
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject subject = new ProxySubject();
subject.request();
 
}
}

 

小结:由测试类,我们看出。客户实际需要调用的是RealSubject类的request()方法,现在却用ProxySubject来代理RealSubject类,同样达到目的,同时还封装了其他方法preRequest()和postRequest()方法可以处理一些其他问题。

分享到:
评论

相关推荐

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    UML和模式应用(架构师必备).part06.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part02.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part01.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part07.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part03.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part04.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part08.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    UML和模式应用(架构师必备).part05.rar

    38.10 映射对象:数据库映射器或数据库代理模式 38.11 使用模板方法模式进行框架设计 38.12 使用模板方法模式的具体化 38.13 使用MapperFactory配置Mapper 38.14 模式:缓存管理 38.15 在类中合并和隐藏SQL语句...

    论大数据的数据来源与采集.docx

    即数据由集中式或分布式的代理机主动获取和数据由源或者第三方推向数据汇聚点. 数据采集的方法主要有以下四种:1、传感器:传感器通常应用在测量物理环境变量并将其转化成数字信号,是采集物理世界信息的主要途径....

    vc++ 开发实例源码包

    CCAMS系统是一种用于局域网下的CS模式的软件管理和监测系统源码 它包括客户端和服务端,客户端软件主要作用是监测本主机的活动,并将监测到的信息定时发送给服务器。服务器可以将收集到的信息以柱状图和文件列表以及...

    中文版RFC,共456

    RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697 FTP的CWD命令 RFC698 Telnet扩展...

    RFC中文文档-txt

    RFC628 更深的数据语言的设计观念 RFC634 最近的网络图 RFC637 SU-DSL网络地址的更改 RFC677 双重数据库的维护 RFC692 对于IMP/HOST 协议的改动的注释 (RFCS 687 AND 690) RFC697 FTP的CWD命令 RFC698 Telnet扩展...

    大学文献检索资料 DOC

    《实用新型专利公报》、《外观设计专利公报》内容有:专利权授予(文摘)——授权公告索引(IPC索引、专利号索引、专利权人索引)专利事务 发明专利申请公开实例: 51 Int.Cl. E04D 5/10 11 公开号 CN123917A 21...

    rfc中文文档目录,包含部分翻译

    RFC66 NIC - 第三级别的想法和其它噪音 RFC69 提议改变 主机/IMP 规范来消除标记 RFC71 输入错误后的再分配 RFC72 建议改变网络协议延期执行 RFC73 响应 NWG/RFC 67 RFC75 网络会议 RFC78 NCP状态报告:UCSB/RAND ...

Global site tag (gtag.js) - Google Analytics