03. 01- 代理模式(Proxy)

1. 概述

由于某些原因需要给某对象提供一个代理以控制该对象的访问,这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介.

1.1 结构

代理模式分为三个角色

  1. 抽象主题类 : (subject)

通过接口或抽象类声明真实主题和代理对象实现的业务方法

  1. 真实主题类 : (real subject)

实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象

  1. 代理类 : (proxy)

提供了与真实主题相同的接口,内部含有真实主题的引用,可以访问,控制或扩展真实主题的功能



2. 案例

  • 例子 : 火车站卖票

火车站可以卖票,但是去买票比较麻烦,比如人多,地方远
可以招火车票代售点买票,人少,距离近
火车站 : 目标对象 . 真实主题类 (real subject)
代售点 : 代理对象 . 代理类 (proxy)

在这里插入图片描述


  1. 抽象主题 : 声明业务

声明卖票的业务

// 抽象主题
public interface SellTickets {
    public void sellTicket();
}

  1. 真实主题类 : 实现具体的业务

实现了具体的业务, 有没有余票, 多少钱一张,等等

// 真实主题
public class TrainStation implements SellTickets {
    @Override
    public void sellTicket() {
        System.out.println("火车站卖票");
    }
}

  1. 代理 : 客户访问的对象,

自身不具备真正的卖票功能, 但我后面有火车站,
你找我买票, 我找火车站买票.
火车站给我票, 我给你票

// 代理  , 持有真实对象 火车站 , 调用真实对象的方法
public class ProxyPoint implements SellTickets{

    private TrainStation trainStation = new TrainStation();
    @Override
    public void sellTicket() {
    // 可以扩展功能 , 加钱...
        System.out.println("售票点代售火车票,方便,就是要收中介费");
        trainStation.sellTicket();
    }
}

  1. 客户 : 访问代理对象
// 客户访问 代理对象 --> 真实对象 --> 调用卖票的方法
ProxyPoint proxyPoint = new ProxyPoint();
        proxyPoint.sellTicket();

3. 优缺点

  • 优点
  1. 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用
  2. 代理对象可以扩展目标对象的功能
  3. 代理模式将客户端与目标对象分离,在一定程度上降低了系统的耦合度
  4. 开闭原则 : 可以再不对服务或客户端做出修改的情况下创建新代理
  • 缺点

增加了系统的复杂度


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值