设计模式学习——代理模式(1)

简介: 一、什么是代理模式 为其他对象提供一种代理以控制对这个对象的访问。其类图如下: Subject:抽象主题类,它既可以是抽象类也可以是接口类,是一个最普通的业务类型定义,无特殊要求。 RealSubject:具体主题类,被代理角色,是具体业务逻辑实现执行者。 Proxy:代理类,负责对具体主题的应用,

设计模式学习——代理模式(1)


一、什么是代理模式


为其他对象提供一种代理以控制对这个对象的访问。其类图如下:


微信图片_20220428105712.png


Subject:抽象主题类,它既可以是抽象类也可以是接口类,是一个最普通的业务类型定义,无特殊要求。


RealSubject:具体主题类,被代理角色,是具体业务逻辑实现执行者。


Proxy:代理类,负责对具体主题的应用,把所有抽象主题定义的方法限制委托给具体主题实现,并在具体主题处理完毕前后做预处理和善后处理的工作。

 

二、应用


接下来我们看一下如何使用代理模式。我们以海外代购为例,假设我们需要购买一块浪琴手表,如果直接在国内购买由于过高的关税我们需要支付更多的钱才能购买,但是如果我们找代购帮我们在海外购买我们只需要额外支付代购费即可相比于关税还是比较划算的,那么我们通过代码来模拟这一过程:


(1)支付购买类(抽象主题类)


public interface IPaymentService {
    void pay();
}


(2)手表支付购买(具体主题类)


public class WatchPaymentService implements IPaymentService {
    @Override
    public void pay() {
        System.out.println("购买一块浪琴手表");
    }
}


(3)代购(代理类)


public class PaymentProxy implements IPaymentService {
    private IPaymentService paymentService;
    public PaymentProxy(IPaymentService paymentService) {
        this.paymentService = paymentService;
    }
    @Override
    public void pay() {
        System.out.println("前往海外某一大型商场");
        paymentService.pay();
        System.out.println("携带商品回国");
    }
}


使用


public class Main {
    public static void main(String[] args)
    {
        PaymentProxy proxy = new PaymentProxy(new WatchPaymentService());
        proxy.pay();
    }
}


三、总结


(1)代理模式的优点


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


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


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


(2)代理模式的缺点


  • 代理模式会造成系统设计中类的数量增加


  • 增加了系统的复杂度;


分类: 设计模式

相关文章
|
20天前
|
设计模式 缓存 监控
【设计模式系列笔记】代理模式
代理模式是一种结构型设计模式,它允许一个对象(代理对象)控制另一个对象的访问。代理对象通常充当客户端和实际对象之间的中介,用于对实际对象的访问进行控制、监控或其他目的。
50 1
|
20天前
|
设计模式 缓存 安全
小谈设计模式(8)—代理模式
小谈设计模式(8)—代理模式
|
7天前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
|
18天前
|
设计模式 Java
Java一分钟之-设计模式:装饰器模式与代理模式
【5月更文挑战第17天】本文探讨了装饰器模式和代理模式,两者都是在不改变原有对象基础上添加新功能。装饰器模式用于动态扩展对象功能,但过度使用可能导致类数量过多;代理模式用于控制对象访问,可能引入额外性能开销。文中通过 Java 代码示例展示了两种模式的实现。理解并恰当运用这些模式能提升代码的可扩展性和可维护性。
32 1
|
12天前
|
设计模式 安全 Java
【JAVA学习之路 | 基础篇】单例设计模式
【JAVA学习之路 | 基础篇】单例设计模式
|
18天前
|
设计模式 存储 前端开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
JS的几种设计模式,Web前端基础三剑客学习知识分享,前端零基础开发
|
20天前
|
设计模式 安全 网络协议
【设计模式】代理模式例子解析
【设计模式】代理模式例子解析
18 2
|
20天前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
20天前
|
设计模式 安全 Java
【设计模式学习】单例模式和工厂模式
【设计模式学习】单例模式和工厂模式
|
20天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式
[设计模式Java实现附plantuml源码~结构型]对象的间接访问——代理模式