最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3+TypeScript實(shí)現(xiàn)中介者模式的詳細(xì)過(guò)程

 更新時(shí)間:2025年06月13日 10:54:44   作者:菜喵007  
在Vue3+TypeScript項(xiàng)目中,它適合組件通信、事件管理或復(fù)雜UI交互,本文給大家介紹Vue3+TypeScript實(shí)現(xiàn)中介者模式,感興趣的朋友一起看看吧

Vue3+TypeScript實(shí)現(xiàn)中介者模式:電腦維修調(diào)度中心

中介者模式(Mediator Pattern)聽(tīng)起來(lái)是不是有點(diǎn)像“程序員在電腦維修店里設(shè)了個(gè)總調(diào)度臺(tái)”?它是一種行為型設(shè)計(jì)模式,通過(guò)一個(gè)中介者來(lái)協(xié)調(diào)多個(gè)對(duì)象間的交互,避免它們直接互相喊來(lái)喊去。今天我們用Vue3和TypeScript,結(jié)合一個(gè)“電腦維修調(diào)度”的幽默例子,帶你搞懂中介者模式如何簡(jiǎn)化復(fù)雜交互,代碼簡(jiǎn)潔又好玩,保證通俗易懂,笑中帶學(xué)!

一、中介者模式是什么?

想象你經(jīng)營(yíng)一家電腦維修店,有客戶、技師、倉(cāng)庫(kù)管理員,大家要協(xié)調(diào):客戶報(bào)修,技師接單,倉(cāng)庫(kù)發(fā)零件。如果他們直接互相聯(lián)系,店里早就亂成一鍋粥!中介者模式就像你的“維修調(diào)度中心”:所有交互都通過(guò)調(diào)度中心,客戶、技師、倉(cāng)庫(kù)只跟調(diào)度中心打交道,網(wǎng)狀關(guān)系變星形,清晰又高效!

核心角色

  • 抽象中介者(Mediator Interface):定義交互接口。
  • 具體中介者(Concrete Mediator):實(shí)現(xiàn)協(xié)調(diào)邏輯,管理所有同事。
  • 同事類(lèi)(Colleague Classes):與中介者通信,處理自身邏輯。

我們用Vue3+TypeScript實(shí)現(xiàn)一個(gè)前端版的“電腦維修調(diào)度系統(tǒng)”,讓你邊調(diào)度維修邊學(xué)中介者模式!

二、代碼實(shí)現(xiàn)

1. 抽象中介者接口

// src/mediators/RepairMediator.ts
export interface RepairMediator {
  sendRequest(sender: Colleague, request: string): void;
  registerColleague(colleague: Colleague): void;
}

幽默講解RepairMediator是“調(diào)度中心的對(duì)講機(jī)”,規(guī)定誰(shuí)能發(fā)請(qǐng)求(sendRequest),誰(shuí)能加入團(tuán)隊(duì)(registerColleague)。就像店里的大喇叭,統(tǒng)一指揮!

2. 具體中介者

// src/mediators/RepairDispatchCenter.ts
import { RepairMediator } from './RepairMediator';
import { Colleague } from './Colleague';
export class RepairDispatchCenter implements RepairMediator {
  private colleagues: Colleague[] = [];
  registerColleague(colleague: Colleague): void {
    this.colleagues.push(colleague);
    colleague.setMediator(this);
  }
  sendRequest(sender: Colleague, request: string): void {
    this.colleagues.forEach(colleague => {
      if (colleague !== sender) {
        colleague.receiveRequest(sender.getName(), request);
      }
    });
  }
}
  • 幽默講解RepairDispatchCenter是“維修調(diào)度中心”,登記每個(gè)同事(客戶、技師等),收到請(qǐng)求就廣播給其他人,省得大家互相喊??蛻粽f(shuō)“修電腦”,調(diào)度中心通知技師和倉(cāng)庫(kù),井然有序!

3. 同事類(lèi)

// src/mediators/Colleague.ts
import { RepairMediator } from './RepairMediator';
export abstract class Colleague {
  protected mediator: RepairMediator | null = null;
  protected name: string;
  constructor(name: string) {
    this.name = name;
  }
  setMediator(mediator: RepairMediator): void {
    this.mediator = mediator;
  }
  getName(): string {
    return this.name;
  }
  abstract receiveRequest(from: string, request: string): string;
}
export class Customer extends Colleague {
  sendRequest(request: string): string {
    if (this.mediator) {
      this.mediator.sendRequest(this, request);
      return `?? ${this.name}發(fā)送請(qǐng)求:${request}`;
    }
    return '?? 未連接調(diào)度中心!';
  }
  receiveRequest(from: string, request: string): string {
    return `?? ${this.name}收到${from}的回復(fù):${request}`;
  }
}
export class Technician extends Colleague {
  sendRequest(request: string): string {
    if (this.mediator) {
      this.mediator.sendRequest(this, request);
      return `?? ${this.name}發(fā)送請(qǐng)求:${request}`;
    }
    return '?? 未連接調(diào)度中心!';
  }
  receiveRequest(from: string, request: string): string {
    return `??? ${this.name}收到${from}的請(qǐng)求:${request},開(kāi)始維修!`;
  }
}

幽默講解Customer是“客戶”,報(bào)修時(shí)喊調(diào)度中心,收到回復(fù)就開(kāi)心。Technician是“技師”,接到客戶請(qǐng)求就開(kāi)工,零件不夠就喊倉(cāng)庫(kù)。每個(gè)人只跟調(diào)度中心聊,互不干擾!

4. Vue3組件:維修調(diào)度界面

// src/components/RepairDispatch.vue
<script setup lang="ts">
import { ref } from 'vue';
import { RepairDispatchCenter } from '../mediators/RepairDispatchCenter';
import { Customer, Technician } from '../mediators/Colleague';
const mediator = new RepairDispatchCenter();
const customer = new Customer('張三');
const technician = new Technician('李技師');
mediator.registerColleague(customer);
mediator.registerColleague(technician);
const request = ref('');
const results = ref<string[]>([]);
const sendRequest = () => {
  if (request.value) {
    results.value.push(customer.sendRequest(request.value));
    results.value.push(technician.receiveRequest(customer.getName(), request.value));
    request.value = '';
  }
};
</script>
<template>
  <div>
    <h2>電腦維修調(diào)度中心</h2>
    <div>
      <label>客戶請(qǐng)求:</label>
      <input v-model="request" placeholder="輸入維修請(qǐng)求" />
    </div>
    <button @click="sendRequest">發(fā)送請(qǐng)求</button>
    <pre>{{ results.join('\n') }}</pre>
  </div>
</template>

幽默講解:這個(gè)Vue組件就像店里的“調(diào)度屏幕”,客戶輸入維修請(qǐng)求(比如“電腦藍(lán)屏”),點(diǎn)“發(fā)送”,中介者模式通過(guò)調(diào)度中心廣播給技師,技師回應(yīng)開(kāi)工??蛻簦ùa)只管喊,調(diào)度中心全搞定!

三、應(yīng)用場(chǎng)景

中介者模式在Vue3開(kāi)發(fā)中就像“電腦維修的調(diào)度中心”,非常適合以下場(chǎng)景:

  • 組件通信:多個(gè)Vue組件需交互(如表單、彈窗),通過(guò)中介者統(tǒng)一協(xié)調(diào)。
  • 事件總線:集中管理組件事件,避免直接綁定。
  • 復(fù)雜UI交互:協(xié)調(diào)多個(gè)UI元素(如按鈕、輸入框)的狀態(tài)變化。
  • 模塊解耦:大型應(yīng)用中,模塊間通過(guò)中介者通信,降低耦合。

幽默例子:你的Vue3項(xiàng)目是個(gè)維修店,客戶、技師、倉(cāng)庫(kù)亂喊?中介者模式像調(diào)度中心,一聲令下全聽(tīng)指揮!代碼像對(duì)講機(jī),溝通順暢,效率爆棚!

四、適用性

中介者模式適合以下前端場(chǎng)景:

  • 復(fù)雜交互:多個(gè)對(duì)象間形成網(wǎng)狀依賴,需簡(jiǎn)化通信。
  • 集中控制:交互邏輯需統(tǒng)一管理,方便擴(kuò)展。
  • 解耦對(duì)象:對(duì)象間無(wú)需直接引用,降低維護(hù)成本。

注意事項(xiàng)

  • 中介者邏輯過(guò)復(fù)雜可能變成“上帝類(lèi)”,需合理劃分職責(zé)。
  • 簡(jiǎn)單交互用事件或狀態(tài)管理可能更高效。

五、注意事項(xiàng)

中介者設(shè)計(jì)

  • 中介者職責(zé)清晰,避免塞入過(guò)多邏輯。
  • 提供靈活的注冊(cè)和通信機(jī)制。

TypeScript優(yōu)勢(shì)

  • 用接口(interface)定義中介者和同事行為,確保類(lèi)型安全。
  • 利用類(lèi)型檢查,防止錯(cuò)誤注冊(cè)同事。

性能考慮

  • 大量同事通信可能影響性能,優(yōu)化廣播邏輯。
  • 避免循環(huán)通信,確保交互單向清晰。

Vue3生態(tài)

  • 參考VueUse的useEventBus,學(xué)習(xí)集中式通信。
  • 結(jié)合Vue的組合式API,優(yōu)化中介者的響應(yīng)式管理。

幽默提示:別讓中介者模式變成“調(diào)度中心的八卦臺(tái)”,啥都管把代碼搞亂(Bug)!用對(duì)場(chǎng)景,中介者讓你的交互像調(diào)度臺(tái)一樣井然有序!

六、總結(jié)

中介者模式就像前端開(kāi)發(fā)中的“維修調(diào)度中心”,通過(guò)集中協(xié)調(diào)對(duì)象交互,簡(jiǎn)化網(wǎng)狀關(guān)系,降低耦合。在Vue3+TypeScript項(xiàng)目中,它適合組件通信、事件管理或復(fù)雜UI交互。中介者模式讓你的代碼像智能調(diào)度臺(tái),通信清晰,協(xié)作高效,優(yōu)雅又省心!

到此這篇關(guān)于Vue3+TypeScript實(shí)現(xiàn)中介者模式的文章就介紹到這了,更多相關(guān)Vue3 TypeScript中介者模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解vue3.0 的 Composition API 的一種使用方法

    詳解vue3.0 的 Composition API 的一種使用方法

    這篇文章主要介紹了vue3.0 的 Composition API 的一種使用方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    Vue從template到render函數(shù)的轉(zhuǎn)換經(jīng)歷模板解析、AST構(gòu)建、優(yōu)化、生成渲染函數(shù)等步驟,首先進(jìn)行詞法分析將模板拆解為tokens,再進(jìn)行語(yǔ)法分析構(gòu)建AST,然后對(duì)AST進(jìn)行靜態(tài)標(biāo)記和提升優(yōu)化,最后轉(zhuǎn)換成JavaScript渲染函數(shù),生成虛擬DOM,完成組件的渲染和更新,實(shí)現(xiàn)了模板的高效轉(zhuǎn)化
    2024-10-10
  • Element中el-table動(dòng)態(tài)合并單元格(span-method方法)

    Element中el-table動(dòng)態(tài)合并單元格(span-method方法)

    本文主要介紹了Element中el-table動(dòng)態(tài)合并單元格(span-method方法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • ant-design-vue 時(shí)間選擇器賦值默認(rèn)時(shí)間的操作

    ant-design-vue 時(shí)間選擇器賦值默認(rèn)時(shí)間的操作

    這篇文章主要介紹了ant-design-vue 時(shí)間選擇器賦值默認(rèn)時(shí)間的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨過(guò)來(lái)看看吧
    2020-10-10
  • 深入理解Vue 單向數(shù)據(jù)流的原理

    深入理解Vue 單向數(shù)據(jù)流的原理

    這篇文章主要介紹了深入理解Vue 單向數(shù)據(jù)流的原理,詳細(xì)的介紹了Vue 單向數(shù)據(jù)流的原理和使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-11-11
  • vue計(jì)算屬性computed--getter和setter用法

    vue計(jì)算屬性computed--getter和setter用法

    這篇文章主要介紹了vue計(jì)算屬性computed--getter和setter用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue的url請(qǐng)求圖片的問(wèn)題及請(qǐng)求失敗解決

    vue的url請(qǐng)求圖片的問(wèn)題及請(qǐng)求失敗解決

    這篇文章主要介紹了vue的url請(qǐng)求圖片的問(wèn)題及請(qǐng)求失敗解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)

    vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn)

    這篇文章主要介紹了vue.js移動(dòng)端app之上拉加載以及下拉刷新實(shí)戰(zhàn),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-09-09
  • 在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng)

    在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng)

    這篇文章主要介紹了在vue中實(shí)現(xiàn)禁止屏幕滾動(dòng),禁止屏幕滑動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法

    Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法

    這篇文章主要介紹了Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

阿瓦提县| 碌曲县| 浠水县| 吐鲁番市| 九江县| 溆浦县| 舞钢市| 扎兰屯市| 寻乌县| 南部县| 高雄县| 丹凤县| 广南县| 车险| 锡林浩特市| 尉犁县| 云浮市| 宜兰县| 罗山县| 栾城县| 本溪市| 平江县| 安丘市| 渑池县| 高碑店市| 金山区| 民权县| 永善县| 长垣县| 腾冲县| 武平县| 徐州市| 谢通门县| 固阳县| 陆川县| 什邡市| 宿迁市| 香格里拉县| 丰都县| 汉沽区| 安顺市|