设计模式[8]-代理模式-Proxy Pattern

1. 代理模式

代理模式(Proxy Pattern)是常用的结构性设计模式,和装饰者模式非常相似,代理类和被代理类实现了同样的接口。代理模式完全隐藏了被代理的对象,并可以控制方法的访问过程。

代理模式的角色一共有三种。

  • Subject(抽象主题角色): RealSubject和Proxy实现的共同接口。

  • RealSubject(真实主题角色):是被代理的对象,客户端对RealSubject毫无所知。

  • Proxy(代理主题角色): 负责代理RealSubject,控制RealSubject的方法访问过程。

本文只讨论静态的代理模式,Java的动态代理涉及到反射或cglib的技术,不是本次讨论的重点,关于动态代理的内容,可以参考http://www.jianshu.com/p/4fe5a75b9202

2. 代理模式举例

下面我们举一个租房的例子,客户只知道中介,不知道房东是谁,最终把房子租下来了。

序号 类名 角色 说明
1 Rentable Subject 抽象主题角色,租房接口
2 Owner RealSubject 真实主题角色,房东
3 Agency Proxy 代理主题角色,中介
4 ProxyMain 客户端 演示调用,租客
Paste_Image.png

1. Rentable类

// 抽象主题,可以出租的
public interface Rentable {
    // 出租
    void rent();
}

2. Owner类

// 真实主题角色,房东
public class Owner implements Rentable{

    @Override
    public void rent() {
        System.out.println("房东出租三居室一套");
    }
}

3. Agency

// 代理角色,中介,客户端不知道被代理的对象。
public class Agency implements Rentable{

    private Owner owner;

    // 代理模式直接在构造函数里面new一个被代理对象。
    // 注意对比装饰者模式,构造器是不同的。
    public Agency() {
        super();
        this.owner = new Owner();
    }

    // 代理模式注重控制对方法的访问
    @Override
    public void rent() {
        // 可以在这里做权限验证等功能,类似Spring AOP。
        System.out.println("中介宣传、并带看房子");
        owner.rent();
        System.out.println("和中介签订租房合同");
    }
}

4. ProxyMain

// 客户端,即租客,只知道中介,不认识房东。
public class ProxyMain {

    public static void main(String[] args) {
        Agency agency = new Agency();
        agency.rent();
    }
}

3. 代理模式总结

优点:
代理模式完全隐藏了被代理的对象,方便控制方法被访问的过程。

缺点:
代理模式有可能使请求处理速度变慢。

4. 代理模式和装饰者模式的对比

相同点:
代理模式中,代理类和被代理类都实现同一个接口;装饰者模式中,装饰类和被装饰类也都实现同一个接口。

不同点:
代理类和装饰类的构造器是不同。代理类在构造器是无参的,明确地创建了一个对象,即只代理一个固定的对象;装饰类的构造器是有参的,可以动态的指定被装饰的对象。

装饰者模式注重为被装饰者添加新的方法;代理模式注重对代理对象的方法访问做控制。

(完)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容