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

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

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

一、中介者模式是什么?

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

核心角色

  • 抽象中介者(Mediator Interface):定義交互接口。
  • 具體中介者(Concrete Mediator):實(shí)現(xiàn)協(xié)調(diào)邏輯,管理所有同事。
  • 同事類(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)度中心的對講機(jī)”,規(guī)定誰能發(fā)請求(sendRequest),誰能加入團(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è)同事(客戶、技師等),收到請求就廣播給其他人,省得大家互相喊。客戶說“修電腦”,調(diào)度中心通知技師和倉庫,井然有序!

3. 同事類

// 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ā)送請求:${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ā)送請求:${request}`;
    }
    return '?? 未連接調(diào)度中心!';
  }
  receiveRequest(from: string, request: string): string {
    return `??? ${this.name}收到${from}的請求:${request},開始維修!`;
  }
}

幽默講解Customer是“客戶”,報(bào)修時(shí)喊調(diào)度中心,收到回復(fù)就開心。Technician是“技師”,接到客戶請求就開工,零件不夠就喊倉庫。每個(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>客戶請求:</label>
      <input v-model="request" placeholder="輸入維修請求" />
    </div>
    <button @click="sendRequest">發(fā)送請求</button>
    <pre>{{ results.join('\n') }}</pre>
  </div>
</template>

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

三、應(yīng)用場景

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

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

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

四、適用性

中介者模式適合以下前端場景:

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

注意事項(xiàng)

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

五、注意事項(xiàng)

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

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

TypeScript優(yōu)勢

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

性能考慮

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

Vue3生態(tài)

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

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

六、總結(jié)

中介者模式就像前端開發(fā)中的“維修調(diào)度中心”,通過集中協(xié)調(diào)對象交互,簡化網(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    Vue從template到render函數(shù)的轉(zhuǎn)換經(jīng)歷模板解析、AST構(gòu)建、優(yōu)化、生成渲染函數(shù)等步驟,首先進(jìn)行詞法分析將模板拆解為tokens,再進(jìn)行語法分析構(gòu)建AST,然后對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方法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(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à)值,希望對大家有所幫助。一起跟隨過來看看吧
    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à)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • vue的url請求圖片的問題及請求失敗解決

    vue的url請求圖片的問題及請求失敗解決

    這篇文章主要介紹了vue的url請求圖片的問題及請求失敗解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(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à)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法

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

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

最新評(píng)論

长兴县| 榆中县| 临颍县| 阿克陶县| 张掖市| 金沙县| 西华县| 太康县| 卓资县| 遂昌县| 鹿泉市| 仲巴县| 秦安县| 微山县| 普洱| 勐海县| 富川| 九寨沟县| 青河县| 贵州省| 锡林郭勒盟| 赤水市| 闽侯县| 永平县| 翁牛特旗| 涞源县| 虞城县| 堆龙德庆县| 雷波县| 光泽县| 延川县| 嘉兴市| 苍山县| 大理市| 五台县| 武威市| 呼图壁县| 乌拉特前旗| 那坡县| 衡阳市| 镇安县|