代理模式(java)

文章介绍了代理模式的结构,包括抽象主题、真实主题和代理类三个角色。通过静态代理案例——火车站售票,展示了如何使用代理类扩展火车站类的功能,如收取售票手续费。代码实现中包括了售票类、火车站类、代理类和测试类的详细内容。代理模式的优点在于能够中介并扩展目标对象的功能,降低系统耦合度,但同时也增加了系统的复杂性。
摘要由CSDN通过智能技术生成

目录

结构

静态代理案例

 代码实现

售票类

火车站类

代理类

测试类

优缺点

优点

缺点


结构

代理(Proxy)模式分为三种角色:

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

  • 真实主题(Real Subject)类: 实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。

  • 代理(Proxy)类 : 提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。

静态代理案例

【例】火车站卖票

如果要买火车票的话,需要去火车站买票,坐车到火车站,排队等一系列的操作,显然比较麻烦。而火车站在多个地方都有代售点,我们去代售点买票就方便很多了。这个例子其实就是典型的代理模式,火车站是目标对象,代售点是代理对象。

 代码实现

售票类

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 售票类
 * @date: 2023/7/20 15:28
 */
public interface SellTickets {
    void sell();
}

火车站类

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 火车站类
 * @date: 2023/7/20 15:29
 */
public class TrainsStation implements SellTickets {

    @Override
    public void sell() {
        System.out.println("火车站买票");
    }

}

代理类

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 售票代理
 * @date: 2023/7/20 15:30
 */
public class TicketsProxy implements  SellTickets {

    private final TrainsStation trainsStation = new TrainsStation();

    @Override
    public void sell() {
        System.out.println("收取售票手续费");
        trainsStation.sell();
    }

}

测试类

package static_proxy;

/**
 * @author: ZQH
 * @project: Design Pattern
 * @description 测试类
 * @date: 2023/7/20 15:27
 */
public class Client {
    public static void main(String[] args) {

        // 实例化代理商
        TicketsProxy proxy = new TicketsProxy();
        // 代理商买票
        proxy.sell();

    }

}

优缺点

优点

  • 代理模式在客户端与目标对象之间起到一个中介作用保护目标对象的作用

  • 代理对象可以扩展目标对象的功能。

  • 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度

缺点

  • 增加了系统的复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依恋、阳光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值