代理模式Proxy入门 之帮你追求心仪的姑娘

话说村里有个姑娘叫小芳,长得好看又漂亮。不少男孩想追她,送花、约她看电影、共进晚餐都被一一拒绝了,人家小芳是个矜持的姑娘,毕竟跟这些男孩也不熟啊。这时,着急的男孩想到一个好办法,通过一个代理人(媒婆,或是小芳的闺蜜啊)约小芳啊。问题引刃而解了,下面就结合这个故事说一说设计模式中的 代理模式Proxy。

代理模式 Proxy

定义:为一个对象提供一个代表以控制对这个对象的访问。

UML图

这里写图片描述
Subject :抽象主题角色,抽象主题类可以是抽象类,也可以是接口,声明了真实对象和代理对象的共同接口。
RealSubject:真实对象角色,即我们要操作的对象实例,它是被Proxy代理和控制访问的对象。
Proxy:代理角色:代理对象角色内部持有对真实对象的引用,通过和真实对象实现了同一个接口,在任何时刻都能代替真实对象。

代码实现案例

首先明确小伙明确小伙追求小芳有哪些行为:送花、看电影、共进晚餐,需求很明确,将其抽取到接口中

public interface IMeet {
    /** 送花 */
    void giveFlower();

    /** 一起晚餐 */
    void haveDinner();

    /** 看电影 */
    void watchMoive();
}

接着的追求小芳的男孩,这里定义为一个客户,实现上述方法

public class Client implements IMeet {

    private Girl girl;

    public Client(Girl girl) {
        super();
        this.girl = girl;
    }

    @Override
    public void giveFlower() {
        System.out.println(girl.getName() + " 送你一枝玫瑰");
    }

    @Override
    public void haveDinner() {
        System.out.println(girl.getName() + " 请你共进晚餐");
    }

    @Override
    public void watchMoive() {
        System.out.println(girl.getName() + " 请你看电影");
    }

}

实现一个Girl类(小芳)

public class Girl {

    private String name;

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

    public String getName() {
        return name;
    }
}

然后就是我们的代理,同样需要实现约会行为接口,并持有一个Client对象

public class Proxy implements IMeet {

    // 持有对 被代理对象
    private Client client;

    public Proxy(Girl girl) {
        super();
        client = new Client(girl);
    }

    @Override
    public void giveFlower() {
        client.giveFlower();
    }

    @Override
    public void haveDinner() {
        client.haveDinner();
    }

    @Override
    public void watchMoive() {
        client.watchMoive();
    }
}

一切就绪,代理人开始替客户(男孩)去约小芳了

/**
     * 村里有个姑娘叫小芳,长得好看又漂亮。
     */
    public static void main(String[] args) {
        Girl girl = new Girl("小芳");
        Proxy proxy = new Proxy(girl);
        proxy.giveFlower();
        proxy.watchMoive();
        proxy.haveDinner();
    }
结果:
小芳 送你一枝玫瑰
小芳 请你看电影
小芳 请你共进晚餐

通过上面方法,可以看到代理对象proxy调用了约会的方法,可最终实现该动作的是 Client(男孩)对象。一个最基础的代理例子就演示完了,是不是很简单。此处需要记住的就是 实际角色和代理角色实现了同一个接口,并且在代理对象持有实际角色对象,在代理中实际控制的是实际角色对象的访问。

不足之处,欢迎大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值