前端设计模式:工厂方法模式、单例模式、订阅模式、中介者模式

这篇具有很好参考价值的文章主要介绍了前端设计模式:工厂方法模式、单例模式、订阅模式、中介者模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

工厂方法模式

工厂方法模式是一种创建型设计模式,它提供了一种将对象的创建与使用分离的方式。在工厂方法模式中,我们定义一个工厂接口,该接口声明了一个用于创建对象的方法。具体的对象创建则由实现该接口的具体工厂类来完成。

工厂方法模式的核心思想是将对象的创建延迟到子类中去实现,这样可以在不修改客户端代码的情况下,通过改变具体工厂类来创建不同的对象。

工厂方法模式的优点包括:

  1. 客户端代码与具体产品类解耦,客户端只需要关心工厂接口和抽象产品类,而不需要关心具体产品的实现细节。
  2. 可以通过添加具体产品类来扩展系统,符合开闭原则。
  3. 可以通过配置文件等方式动态切换具体工厂类,实现灵活的对象创建。

工厂方法模式在实际开发中广泛应用,例如在框架中的对象创建、插件系统中的插件加载等场景中都可以使用工厂方法模式来实现灵活的对象创建和管理。

class Factory {
    // 定义一个工厂方法
    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'
    }
    //启动方法
    start() {
        console.log('plugA启动了')
    }
}
// 插件B
class plugB implements Plug {
    id: string
    name: string

    constructor() {
        this.id = 'plugB'
        this.name = 'plugB'
    }
    //启动方法
    start() {
        console.log('plugB启动了')
    }
}

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

单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

在单例模式中,类的构造函数被私有化,这样就不能通过常规的方式创建类的实例。而是通过一个静态方法或者静态变量来获取类的唯一实例。

单例模式的主要特点包括:

  1. 类只有一个实例:通过限制类的实例化,确保只有一个实例存在。
  2. 全局访问点:通过提供一个全局的访问点,使得其他对象可以方便地访问该实例。

单例模式的应用场景包括:

  1. 需要确保只有一个实例的情况,如线程池、数据库连接池等。
  2. 需要频繁创建和销毁对象的情况下,可以节省系统资源。
  3. 需要全局访问点来管理共享资源的情况。
class Singleton {  
  private static instance: Singleton;  
  
  private constructor() {  
    // 私有化构造函数,防止外部实例化  
  }  
  
  public static getInstance(): Singleton {  
    if (!Singleton.instance) {  
      Singleton.instance = new Singleton();  
    }  
    return Singleton.instance;  
  }  
  
  // 其他类的方法或属性  
  public doSomething() {  
    console.log("Doing something...");  
  }  
}  
  
// 访问单例模式对象  
const singleton = Singleton.getInstance();  
singleton.doSomething();

订阅模式

订阅模式(Publish-Subscribe Pattern)是一种常见的软件设计模式,用于实现对象之间的松耦合通信。在该模式中,存在两种角色:发布者(Publisher)和订阅者(Subscriber)。

发布者负责产生事件或消息,并将其发送给所有订阅者。订阅者则注册对特定事件或消息的兴趣,并在发布者发送相应事件或消息时接收并处理它们。

订阅模式的核心思想是解耦发布者和订阅者之间的关系,使得它们可以独立地演化和扩展。发布者不需要知道订阅者的具体实现,只需要将事件或消息发送给订阅者即可。同样,订阅者也不需要知道发布者的具体实现,只需要注册对感兴趣的事件或消息,并在接收到它们时进行相应的处理。

在实际应用中,订阅模式常用于事件驱动的系统中,例如GUI界面中的事件处理、消息队列系统、观察者模式等。它可以有效地降低系统的耦合度,提高系统的可维护性和可扩展性。

总结起来,订阅模式通过发布者和订阅者之间的松耦合通信,实现了事件或消息的传递和处理。它是一种常见的设计模式,可以应用于各种软件系统中,提高系统的灵活性和可扩展性。

// 发布者
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);
    }
  }

  // 发布消息
  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}`);
  }
}

// 创建发布者和订阅者
const publisher = new Publisher();
const subscriber1 = new Subscriber("Subscriber 1");
const subscriber2 = new Subscriber("Subscriber 2");

// 订阅者订阅发布者
publisher.subscribe(subscriber1);
publisher.subscribe(subscriber2);

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

// 订阅者取消订阅
publisher.unsubscribe(subscriber2);

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

中介者模式

中介者模式(Mediator Pattern)是一种行为型设计模式,它通过封装一系列对象之间的交互,使得这些对象不需要直接相互引用,从而降低了它们之间的耦合度。

在中介者模式中,中介者对象负责协调和控制一组相关对象的交互。它通过将对象之间的通信集中在中介者对象中,而不是让对象直接相互通信,从而实现对象之间的解耦。

中介者模式的核心思想是将对象之间的交互逻辑集中在中介者对象中,而不是分散在各个对象之间。这样一来,当系统中的对象发生变化时,只需要修改中介者对象的代码即可,而不需要修改其他对象的代码,从而提高了系统的可维护性和扩展性。

比如:聊天室中的成员之间的聊天通常采用了中介者设计模式。中介者设计模式是一种行为型设计模式,它通过将对象之间的交互集中在一个中介者对象中,来减少对象之间的直接耦合。在聊天室中,中介者对象负责接收和分发成员之间的消息,成员之间的通信通过中介者进行,而不是直接相互交流。这种设计模式可以提高系统的可扩展性和灵活性,同时也方便管理和控制成员之间的交互文章来源地址https://www.toymoban.com/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);
  }

  // 发送消息
  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}`);
  }
}

// 创建聊天室和用户
const chatRoom = new ChatRoom();
const user1 = new User("User 1");
const user2 = new User("User 2");

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

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

到了这里,关于前端设计模式:工厂方法模式、单例模式、订阅模式、中介者模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式-创建型模式(单例、工厂、建造、原型)

    设计模式:软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 面向对象三大特性:封装、继承、多态。 面向对象设计的SOLID原则: (1)开放封闭原则:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情

    2024年02月08日
    浏览(43)
  • Python入门【​编辑、组合、设计模式_工厂模式实现 、设计模式_单例模式实现、工厂和单例模式结合、异常是什么?异常的解决思路 】(十七)

    👏作者简介:大家好,我是爱敲代码的小王,CSDN博客博主,Python小白 📕系列专栏:python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 📧如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀 🔥如果感觉博主的文章还不错的

    2024年02月14日
    浏览(28)
  • java基础之设计模式(单例模式,工厂模式)

    是一种编码套路 单例模式 一个类只能创建一个实例 饿汉式 直接创建唯一实例 缺点: 有可能浪费空间 懒汉式 在获取实例是创建唯一对象 缺点: 线程效率慢 懒汉式-进阶版 在懒汉式的基础上,利用同步代码块结合二次校验提高执行效率 工厂模式 是一种底层技术,通常用于底层框

    2024年01月18日
    浏览(33)
  • 【2023-05-09】 设计模式(单例,工厂)

    单例模式 顾名思义,就是整个系统对外提供的实例有且只有一个 特点: ​ 1、单例类只有一个实例 ​ 2、必须是自己创建唯一实例 ​ 3、必须给所以对象提供这个实例 分类:一般分为饿汉式单例(直接实例化)和懒汉式单例(使用时才实例化) 饿汉式单例 懒汉式单例 同步

    2024年02月03日
    浏览(30)
  • 【java设计模式】创建型模式介绍(工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式)

    简介 本文介绍Java设计模式中创建型模式的五种 一、工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工

    2024年02月16日
    浏览(38)
  • day39 注解 设计模式(单例模式和工厂模式)

    @Target    @Target(ElementType.TYPE) @Target({                 ElementType.TYPE,                          ElementType.METHOD}) //确定自定义的注解的使用范围 type为类  method为方法  field为属性 @Retention @Retention()  //(不添加参数默认是class) @Retention(RetentionPolicy.CLASS)// 保留到

    2024年02月09日
    浏览(26)
  • Java中23种设计模式-单例模式--工厂模式

    加油,新时代打工人! 23种设计模式定义介绍 Java中23种设计模式-单例模式 Java中23种设计模式-单例模式2–懒汉式线程不安全 Java中23种设计模式-单例模式2–懒汉式2线程安全 Java中23种设计模式-单例模式–饿汉式 定义: 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一

    2024年02月21日
    浏览(33)
  • 设计模式(单例模式、工厂模式及适配器模式、装饰器模式)

    目录 0 、设计模式简介 一、单例模式 二、工厂模式 三、适配器模式 四、装饰器模式  设计模式可以分为以下三种:  创建型模式: 用来描述 “如何创建对象” ,它的主要特点是 “将对象的创建和使用分离”。包括 单例 、原型、 工厂方法 、 抽象工厂 和建造者 5 种模式。

    2024年02月06日
    浏览(30)
  • C++面试:单例模式、工厂模式等简单的设计模式 & 创建型、结构型、行为型设计模式的应用技巧

            理解和能够实现基本的设计模式是非常重要的。这里,我们将探讨两种常见的设计模式:单例模式和工厂模式,并提供一些面试准备的建议。 目录 单例模式 (Singleton Pattern) 工厂模式 (Factory Pattern) 面试准备  1. 理解设计模式的基本概念 2. 掌握实现细节 3. 讨论优缺

    2024年02月01日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包