码迷,mamicode.com
首页 > 其他好文 > 详细

静态代理模式

时间:2017-09-21 14:43:43      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:zha   ret   todo   ati   动态代理模式   rac   ges   模式   ons   

 

静态代理模式,为其他对象提供一种代理来控制对这个对象的访问。

代理,顾名思义,就好比如明星的经纪人可以代理他处理一些业务上的事情,再比如你领取快递,几乎都是通过一些代理点领取,应该没人到总部领取吧。

UML:

共用的接口(Subject):RealSubject和Proxy的共用接口

RealSubject: 定义了Proxy所代表的真实实体

Proxy类:保存一个RealSubject引用使得代理可以访问实体,并提供一个与RealSubject的接口相同的接口,来代理实体

技术分享

例子:王五(RealSubject)让保姆(Proxy)代理自己赵六超市(Supermarket)去买个西瓜(IBuyWatermelon)

Supermarket

package com.magggie.proxy;

public class Supermarket {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Supermarket(String name) {
        super();
        this.name = name;
    }

    public Supermarket() {
        super();
    }
    
}

 

IBuyWatermelon():共用的接口

package com.magggie.proxy;

public interface IBuyWatermelon {
    //代理事件
    public abstract void buyWatermelon();
}

 

RealSubjec():被代理者

package com.magggie.proxy;

public class RealSubject implements IBuyWatermelon{
    private Supermarket supermaket;
    
    public RealSubject(Supermarket supermaket) {
        super();
        this.supermaket = supermaket;
    }

    public RealSubject() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public void buyWatermelon() {
        System.out.println("在"+supermaket.getName()+" 买西瓜");
    }

}

 

Proxy:代理者

package com.magggie.proxy;

public class Proxy implements IBuyWatermelon{
    RealSubject wangWu;//持有RealSubject的引用
//    在构造函数时new出RealSubject
    public Proxy(Supermarket supermarket) {
        wangWu = new RealSubject(supermarket);
    }


    @Override
    public void buyWatermelon() {
//在方法里调用realsubject的方法
        wangWu.buyWatermelon();
    }

}

Client调用

package com.magggie.proxy;

public class Client {

    public static void main(String[] args) {
        Supermarket zhaoLiu = new Supermarket();
        zhaoLiu.setName("赵六超市");
        
        Proxy hourseKeeper = new Proxy(zhaoLiu);
        
//从代理模式可以看出,在客户端只调用Proxy,并没有出现RealSubject
        hourseKeeper.buyWatermelon();
    }

}

输出

在赵六超市 买西瓜

 

代理模式使得隐藏了RealSubject,有起到安全的作用,实际上有安全代理,用来控制真实对象访问时的权限,还有远程代理,虚拟代理,智能指引等。

但是现在的静态代理模式遇到多个代理类时,同时代理事件的接口要添加或减少方法时,就要同时去更改多个地方的代码,这就跟开放-封闭原则违背了。。

因此动态代理模式出现了。。。。

 

静态代理模式

标签:zha   ret   todo   ati   动态代理模式   rac   ges   模式   ons   

原文地址:http://www.cnblogs.com/maggiejyt/p/7568306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!