aiyoudiao aiyoudiao
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档

码二

扫微信二维码,认识一下码二吧😉。
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档
  • LeetCode

  • 算法

  • 数据结构

  • 设计模式

    • 浅聊设计理念
    • 谈一谈设计原则
    • 工厂方法模式
    • 抽象工厂模式
    • 建造者模式
    • 原型模式
    • 单例模式
    • 桥接模式
    • 代理模式
      • 前言
      • 代理模式
    • 装饰器模式
    • 适配器模式
    • 享元模式
    • 组合模式
    • 外观模式
    • 观察者模式
    • 模板方法模式
    • 策略模式
    • 职责链模式
    • 状态模式
    • 迭代器模式
    • 访问者模式
    • 备忘录模式
    • 命令模式
    • 解释器模式
    • 中介者模式
  • Other

  • vue3设计与实现

  • 算法与设计
  • 设计模式
aiyoudiao
2022-02-21

代理模式

# 前言

代理模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。

# 代理模式

应用场景:用作业务的中间层来处理,会提供功能相关的全新接口,这些功能接口是基于原始的功能进行再次处理得来的。比如拦截器、过滤器、缓存等等。对数据源的读写操作都会先通过中间这一层,中间这一层就是代理,所以一般可以在代理这里设置关卡,比如监控、统计、鉴权、限流、日志、缓存等等。

理解:类、对象的结构和使用解耦,代理模式可以通过继承的方式也可以通过静态借用的方式,也可以使用动态借用的方式。代理是中间层,任何操作都要经过这个中间层,有了这个中间层就可以有很多的操作。中间层一般都会对外屏蔽目标,目标对外是不可见的。

namespace struct_mode_02 {

    interface SignAContract {

        signAContract (): void
    }

    //#region 
    
    // 产品类
    class SuperStar implements SignAContract {
        signAContract(): void {
            console.log('—————— 签约 ——————')
        }
    }

    // 代理类:继承
    class StarAgent extends SuperStar {

        signAContract () {
            console.log('—————— 经纪人准备合同 ——————')
            super.signAContract()
            console.log('—————— 签约完毕 ——————')
        }
    }

    // 代理类:借用
    class StarAgent2 implements SignAContract {

        superStar: SignAContract = new SuperStar()

        signAContract(): void {
            console.log('—————— 经纪人准备合同 2——————')
            this.superStar.signAContract()
            console.log('—————— 签约完毕 2——————')
        }
    }

    // 代理类:动态代理
    class StarAgent3 implements SignAContract {

        superStar?: SignAContract

        signAContract(): void {
            if (!this.superStar) {
                console.log('当前经济人未签约任何明星。')
                return
            }

            console.log('—————— 经纪人准备合同 3——————')
            this.superStar.signAContract()
            console.log('—————— 签约完毕 3——————')
        }

        setStar (star: SignAContract): SignAContract {
            this.superStar = star

            return this
        }
    }

    // 使用 1:继承
    new StarAgent().signAContract()

    // 使用2:代理借用
    new StarAgent2().signAContract()

    // 使用3:动态代理
    new StarAgent3().setStar(new SuperStar()).signAContract()

}
#设计模式
上次更新时间: 10年18月2023日 01时57分53秒
桥接模式
装饰器模式

← 桥接模式 装饰器模式 →

最近更新
01
01.数据结构导论一览.md
10-16
02
30.2023年06月04日.md
06-04
03
08.与测量相关.md
05-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 aiyoudiao 码二 备案号: 鄂ICP备2022002654号-1