国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端設(shè)計(jì)模式:工廠方法模式、單例模式、訂閱模式、中介者模式

這篇具有很好參考價(jià)值的文章主要介紹了前端設(shè)計(jì)模式:工廠方法模式、單例模式、訂閱模式、中介者模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

工廠方法模式

工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種將對(duì)象的創(chuàng)建與使用分離的方式。在工廠方法模式中,我們定義一個(gè)工廠接口,該接口聲明了一個(gè)用于創(chuàng)建對(duì)象的方法。具體的對(duì)象創(chuàng)建則由實(shí)現(xiàn)該接口的具體工廠類來完成。

工廠方法模式的核心思想是將對(duì)象的創(chuàng)建延遲到子類中去實(shí)現(xiàn),這樣可以在不修改客戶端代碼的情況下,通過改變具體工廠類來創(chuàng)建不同的對(duì)象。

工廠方法模式的優(yōu)點(diǎn)包括:

  1. 客戶端代碼與具體產(chǎn)品類解耦,客戶端只需要關(guān)心工廠接口和抽象產(chǎn)品類,而不需要關(guān)心具體產(chǎn)品的實(shí)現(xiàn)細(xì)節(jié)。
  2. 可以通過添加具體產(chǎn)品類來擴(kuò)展系統(tǒng),符合開閉原則。
  3. 可以通過配置文件等方式動(dòng)態(tài)切換具體工廠類,實(shí)現(xiàn)靈活的對(duì)象創(chuàng)建。

工廠方法模式在實(shí)際開發(fā)中廣泛應(yīng)用,例如在框架中的對(duì)象創(chuàng)建、插件系統(tǒng)中的插件加載等場(chǎng)景中都可以使用工廠方法模式來實(shí)現(xiàn)靈活的對(duì)象創(chuàng)建和管理。

class Factory {
    // 定義一個(gè)工廠方法
    static createPlug(type) {
        switch (type) {
            case 'plugA':
                return new plugA()
            case 'plugB':
                return new plugB()
            default:
                throw new Error('Invalid plug type')
        }
    }
}

interface Plug {
    id: string
    name: string
    start(): void
}

// 插件A
class plugA implements Plug {
    id: string
    name: string

    constructor() {
        this.id = 'plugA'
        this.name = 'plugA'
    }
    //啟動(dòng)方法
    start() {
        console.log('plugA啟動(dòng)了')
    }
}
// 插件B
class plugB implements Plug {
    id: string
    name: string

    constructor() {
        this.id = 'plugB'
        this.name = 'plugB'
    }
    //啟動(dòng)方法
    start() {
        console.log('plugB啟動(dòng)了')
    }
}

try {
    const list = ['plugA', 'plugB']
    list.forEach(type => {
        const plug = Factory.createPlug(type)
        plug.start()
    })
} catch (error) {
    console.log('插件錯(cuò)誤:', error)
}

單例模式

單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問點(diǎn)來訪問該實(shí)例。

在單例模式中,類的構(gòu)造函數(shù)被私有化,這樣就不能通過常規(guī)的方式創(chuàng)建類的實(shí)例。而是通過一個(gè)靜態(tài)方法或者靜態(tài)變量來獲取類的唯一實(shí)例。

單例模式的主要特點(diǎn)包括:

  1. 類只有一個(gè)實(shí)例:通過限制類的實(shí)例化,確保只有一個(gè)實(shí)例存在。
  2. 全局訪問點(diǎn):通過提供一個(gè)全局的訪問點(diǎn),使得其他對(duì)象可以方便地訪問該實(shí)例。

單例模式的應(yīng)用場(chǎng)景包括:

  1. 需要確保只有一個(gè)實(shí)例的情況,如線程池、數(shù)據(jù)庫連接池等。
  2. 需要頻繁創(chuàng)建和銷毀對(duì)象的情況下,可以節(jié)省系統(tǒng)資源。
  3. 需要全局訪問點(diǎn)來管理共享資源的情況。
class Singleton {  
  private static instance: Singleton;  
  
  private constructor() {  
    // 私有化構(gòu)造函數(shù),防止外部實(shí)例化  
  }  
  
  public static getInstance(): Singleton {  
    if (!Singleton.instance) {  
      Singleton.instance = new Singleton();  
    }  
    return Singleton.instance;  
  }  
  
  // 其他類的方法或?qū)傩? 
  public doSomething() {  
    console.log("Doing something...");  
  }  
}  
  
// 訪問單例模式對(duì)象  
const singleton = Singleton.getInstance();  
singleton.doSomething();

訂閱模式

訂閱模式(Publish-Subscribe Pattern)是一種常見的軟件設(shè)計(jì)模式,用于實(shí)現(xiàn)對(duì)象之間的松耦合通信。在該模式中,存在兩種角色:發(fā)布者(Publisher)和訂閱者(Subscriber)。

發(fā)布者負(fù)責(zé)產(chǎn)生事件或消息,并將其發(fā)送給所有訂閱者。訂閱者則注冊(cè)對(duì)特定事件或消息的興趣,并在發(fā)布者發(fā)送相應(yīng)事件或消息時(shí)接收并處理它們。

訂閱模式的核心思想是解耦發(fā)布者和訂閱者之間的關(guān)系,使得它們可以獨(dú)立地演化和擴(kuò)展。發(fā)布者不需要知道訂閱者的具體實(shí)現(xiàn),只需要將事件或消息發(fā)送給訂閱者即可。同樣,訂閱者也不需要知道發(fā)布者的具體實(shí)現(xiàn),只需要注冊(cè)對(duì)感興趣的事件或消息,并在接收到它們時(shí)進(jìn)行相應(yīng)的處理。

在實(shí)際應(yīng)用中,訂閱模式常用于事件驅(qū)動(dòng)的系統(tǒng)中,例如GUI界面中的事件處理、消息隊(duì)列系統(tǒng)、觀察者模式等。它可以有效地降低系統(tǒng)的耦合度,提高系統(tǒng)的可維護(hù)性和可擴(kuò)展性。

總結(jié)起來,訂閱模式通過發(fā)布者和訂閱者之間的松耦合通信,實(shí)現(xiàn)了事件或消息的傳遞和處理。它是一種常見的設(shè)計(jì)模式,可以應(yīng)用于各種軟件系統(tǒng)中,提高系統(tǒng)的靈活性和可擴(kuò)展性。

// 發(fā)布者
class Publisher {
  private subscribers: Subscriber[] = [];

  // 添加訂閱者
  public subscribe(subscriber: Subscriber): void {
    this.subscribers.push(subscriber);
  }

  // 移除訂閱者
  public unsubscribe(subscriber: Subscriber): void {
    const index = this.subscribers.indexOf(subscriber);
    if (index !== -1) {
      this.subscribers.splice(index, 1);
    }
  }

  // 發(fā)布消息
  public publish(message: string): void {
    console.log(`Publisher: ${message}`);
    this.subscribers.forEach((subscriber) => {
      subscriber.update(message);
    });
  }
}

// 訂閱者
class Subscriber {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  // 接收并處理消息
  public update(message: string): void {
    console.log(`${this.name} received: ${message}`);
  }
}

// 創(chuàng)建發(fā)布者和訂閱者
const publisher = new Publisher();
const subscriber1 = new Subscriber("Subscriber 1");
const subscriber2 = new Subscriber("Subscriber 2");

// 訂閱者訂閱發(fā)布者
publisher.subscribe(subscriber1);
publisher.subscribe(subscriber2);

// 發(fā)布者發(fā)布消息
publisher.publish("Hello, World!");

// 訂閱者取消訂閱
publisher.unsubscribe(subscriber2);

// 發(fā)布者再次發(fā)布消息
publisher.publish("Goodbye!");

中介者模式

中介者模式(Mediator Pattern)是一種行為型設(shè)計(jì)模式,它通過封裝一系列對(duì)象之間的交互,使得這些對(duì)象不需要直接相互引用,從而降低了它們之間的耦合度。

在中介者模式中,中介者對(duì)象負(fù)責(zé)協(xié)調(diào)和控制一組相關(guān)對(duì)象的交互。它通過將對(duì)象之間的通信集中在中介者對(duì)象中,而不是讓對(duì)象直接相互通信,從而實(shí)現(xiàn)對(duì)象之間的解耦。

中介者模式的核心思想是將對(duì)象之間的交互邏輯集中在中介者對(duì)象中,而不是分散在各個(gè)對(duì)象之間。這樣一來,當(dāng)系統(tǒng)中的對(duì)象發(fā)生變化時(shí),只需要修改中介者對(duì)象的代碼即可,而不需要修改其他對(duì)象的代碼,從而提高了系統(tǒng)的可維護(hù)性和擴(kuò)展性。

比如:聊天室中的成員之間的聊天通常采用了中介者設(shè)計(jì)模式。中介者設(shè)計(jì)模式是一種行為型設(shè)計(jì)模式,它通過將對(duì)象之間的交互集中在一個(gè)中介者對(duì)象中,來減少對(duì)象之間的直接耦合。在聊天室中,中介者對(duì)象負(fù)責(zé)接收和分發(fā)成員之間的消息,成員之間的通信通過中介者進(jìn)行,而不是直接相互交流。這種設(shè)計(jì)模式可以提高系統(tǒng)的可擴(kuò)展性和靈活性,同時(shí)也方便管理和控制成員之間的交互文章來源地址http://www.zghlxwxcb.cn/news/detail-526304.html

// 定義聊天室類
class ChatRoom {
  private readonly users: Set<User> = new Set();

  // 添加用戶
  public addUser(user: User): void {
    this.users.add(user);
  }

  // 移除用戶
  public removeUser(user: User): void {
    this.users.delete(user);
  }

  // 發(fā)送消息
  public sendMessage(sender: User, message: string): void {
    for (const user of this.users) {
      if (user !== sender) {
        user.receiveMessage(sender, message);
      }
    }
  }
}

// 定義用戶類
class User {
  private name: string;

  constructor(name: string) {
    this.name = name;
  }

  // 接收消息
  public receiveMessage(sender: User, message: string): void {
    console.log(`[${sender.name}] ${message}`);
  }
}

// 創(chuàng)建聊天室和用戶
const chatRoom = new ChatRoom();
const user1 = new User("User 1");
const user2 = new User("User 2");

// 將用戶添加到聊天室
chatRoom.addUser(user1);
chatRoom.addUser(user2);

// 發(fā)送消息
chatRoom.sendMessage(user1, "Hello, is there anyone out there?");
chatRoom.sendMessage(user2, "Yes, I'm here.");

到了這里,關(guān)于前端設(shè)計(jì)模式:工廠方法模式、單例模式、訂閱模式、中介者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包