前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >代理模式

代理模式

作者头像
Zephery
发布2018-03-12 11:07:05
6390
发布2018-03-12 11:07:05
举报
文章被收录于专栏:ZepheryZephery

代理模式(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

代码语言:javascript
复制
public interface BuyTicket {    public void showticket();}

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

代码语言:javascript
复制
public class Train implements BuyTicket {    @Override    public void showticket() {        System.out.println("one ticket");    }}

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

代码语言:javascript
复制
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.客户端测试类

代码语言:javascript
复制
public class ProxyPattern {    public static void main(String args[]) {        BuyTicket x = new Train();        TicketCenter y = new TicketCenter(x);        y.buy();    }}

运行结果:

代码语言:javascript
复制
by proxyone ticket
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 代理模式(Proxy Pattern)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档