代理模式

代理模式(Proxy Pattern)

GoF中给出的代理模式的定义为: 代理模式给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。 代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。 代理模式根据其目的和实现可分为很多种类,常用的代理模式包括如下几种: (1)远程代理(Remote Proxy)————为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以是在同一台主机中,也可以是在另一台主机中,远程代理又称为大使(Ambassador) (2)虚拟代理(Virtual Proxy)————如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建。 (3)保护代理(Protect Proxy)————控制一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。 (4)缓冲代理(Cache Proxy)————为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。 (5)只能引用代理(Smart Reference Proxy)————当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来。

代码实现: 1.抽象主题类——BuyTicket.java

public interface BuyTicket {    public void showticket();}

2.具体主题类——Train.java

public class Train implements BuyTicket {    @Override    public void showticket() {        System.out.println("one ticket");    }}

3.代理角色类——TicketCenter.java

public class TicketCenter implements BuyTicket {    private BuyTicket ticket;    public TicketCenter(BuyTicket ticket) {        this.ticket = ticket;    }    @Override    public void showticket() {        ticket.showticket();    }    public void buy() {        System.out.println("by proxy");        showticket();    }}

4.客户端测试类

public class ProxyPattern {    public static void main(String args[]) {        BuyTicket x = new Train();        TicketCenter y = new TicketCenter(x);        y.buy();    }}

运行结果:

by proxyone ticket

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrif...

1014
来自专栏任浩强的运维生涯

mongodb基础篇

一、  关于mongodb 两种非关系数据库 Redis:满足极高读写性能的Key-Value数据库       键值式储存,可以通过键快速查询到值。     ...

3228
来自专栏程序员阿凯

ClassNotFoundException 和 NoClassDefFoundError 的区别

1286
来自专栏IT可乐

mybatis源码解读(三)——数据源的配置

1063
来自专栏Python

进程池、线程池、回调函数

一 进程池 在利用Python进行系统管理的时候,特别是同时操作多个文件目录,或者远程控制多台主机,并行操作可以节约大量的时间。多进程是实现并发的手段之一,需要...

2888
来自专栏小勇DW3

设计模式--代理模式(附源码分析)

 在平时的开发过程中,我们实现方法的调用往往只是普通的对象调用方法,实现复杂的业务就是一层一层的对象调用方法依次进行实现,但是如果我要实现在某些方法执行前或者...

963
来自专栏老九学堂

【干货】2016Java高薪面试题第三波

问:Java中的两种异常类型是什么?他们有什么区别? 答:Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。 不受检查...

2674
来自专栏闪电gogogo的专栏

Python初学——多线程Threading

接着上篇继续跟着沫凡小哥学Python啦 1.1 什么是多线程 Threading 多线程可简单理解为同时执行多个任务。 多进程和多线程都可以执行多个任务,线程...

1775
来自专栏Java技术栈

关于Java序列化你应该知道的一切

什么是序列化 我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。 Java序列化技术正是将对象转变成一串由...

2635
来自专栏Golang语言社区

Golang语言社区--Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrif...

50710

扫描关注云+社区