前端中常见的设计模式

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

1.单例模式

描述:保证一个类仅有实例,并提供一个可以全局访问他的点,它通常用于管理应用程序的全局状态或资源,例如一个唯一的状态管理器。

代码示例:

class Singleton {
  constructor() {
    if (!Singleton.instance) {
      Singleton.instance = this;
    }
    return Singleton.instance;
  }
}
const instance1 = new Singleton();
const instance2 = new Singleton();
console.log(instance1 === instance2); // true

2. 观察者模式

描述:观察者模式用于建立对象之间的一对多依赖关系,使得当一个对象的状态发生变化时,所有依赖它的对象都会得到通知。在前端中,常见于事件处理和数据变化监听。

代码示例

class Observable {
  constructor() {
    this.observers = [];
  }
  addObserver(observer) {
    this.observers.push(observer);
  }
  notifyObservers(data) {
    this.observers.forEach(observer => observer.update(data));
  }
}

class Observer {
  update(data) {
    console.log(`Received data: ${data}`);
  }
}

const subject = new Observable();
const observer1 = new Observer();
const observer2 = new Observer();

subject.addObserver(observer1);
subject.addObserver(observer2);

subject.notifyObservers("Hello, observers!");

3. 工厂模式(Factory Pattern):

描述:工厂模式用于通过一个共同的接口来创建对象,隐藏了对象的创建细节。在前端中,可以用于创建不同类型的UI组件。

代码示例

class Button {
  render() {
    console.log("Rendering a button");
  }
}
class Input {
  render() {
    console.log("Rendering an input");
  }
}

class UIFactory {
  create(type) {
    switch (type) {
      case "button":
        return new Button();
      case "input":
        return new Input();
      default:
        throw new Error("Invalid type");
    }
  }
}

const factory = new UIFactory();
const button = factory.create("button");
const input = factory.create("input");

button.render(); // Logs: "Rendering a button"
input.render();  // Logs: "Rendering an input"

4. 装饰者模式

描述:装饰者模式用于动态地将责任添加到对象上,以扩展对象的功能。在前端中,可以用于增强组件的功能。
代码示例:

class Component {
  operation() {
    console.log("Basic operation");
  }
}

class Decorator {
  constructor(component) {
    this.component = component;
  }
  operation() {
    console.log("Decorator operation");
    this.component.operation();
  }
}

const component = new Component();
const decoratedComponent = new Decorator(component);

component.operation();         // Logs: "Basic operation"
decoratedComponent.operation(); // Logs: "Decorator operation" followed by "Basic operation"

5.策略模式

描述:策略模式定义了一系列算法,并将每个算法封装起来,使得它们可以互相替换。在前端中,可以用于处理不同的数据转换、验证或处理逻辑。
代码示例

class PaymentStrategy {
  constructor(paymentMethod) {
    this.paymentMethod = paymentMethod;
  }
  pay(amount) {
    return this.paymentMethod.pay(amount);
  }
}

class CreditCardPayment {
  pay(amount) {
    console.log(`Paying ${amount} using credit card.`);
  }
}

class PayPalPayment {
  pay(amount) {
    console.log(`Paying ${amount} using PayPal.`);
  }
}

const creditCardPayment = new PaymentStrategy(new CreditCardPayment());
creditCardPayment.pay(100); // Logs: "Paying 100 using credit card."

const payPalPayment = new PaymentStrategy(new PayPalPayment());
payPalPayment.pay(50); // Logs: "Paying 50 using PayPal."

6. 适配器模式

描述:适配器模式用于将一个类的接口转换成客户端期望的另一个接口。在前端中,可以用于处理不同数据格式或API之间的适配。
代码示例

class OldApi {
  request() {
    return "Response from old API";
  }
}

class NewApi {
  fetch() {
    return "Response from new API";
  }
}

class Adapter {
  constructor(api) {
    this.api = api;
  }
  request() {
    if (this.api instanceof OldApi) {
      return this.api.request();
    } else if (this.api instanceof NewApi) {
      return this.api.fetch();
    }
  }
}

const oldApi = new OldApi();
const newApi = new NewApi();

const oldAdapter = new Adapter(oldApi);
console.log(oldAdapter.request()); // Logs: "Response from old API"

const newAdapter = new Adapter(newApi);
console.log(newAdapter.request()); // Logs: "Response from new API"

7. 命令模式

描述:命令模式将请求或操作封装成对象,允许参数化调用。在前端中,可以用于处理用户操作、撤销/重做功能等。
代码描述:

class Command {
  constructor(receiver) {
    this.receiver = receiver;
  }
  execute() {
    this.receiver.performAction();
  }
}

class Receiver {
  performAction() {
    console.log("Action performed");
  }
}

const receiver = new Receiver();
const command = new Command(receiver);

command.execute(); // Logs: "Action performed"

8. 代理模式

描述: 代理模式控制对其他对象的访问,可以添加额外的逻辑,如缓存、权限控制等。在前端中,可以用于懒加载、请求缓存等场景。
代码描述

class RealImage {
  constructor(filename) {
    this.filename = filename;
    this.loadImageFromDisk();
  }
  display() {
    console.log(`Displaying image: ${this.filename}`);
  }
  loadImageFromDisk() {
    console.log(`Loading image: ${this.filename}`);
  }
}

class ProxyImage {
  constructor(filename) {
    this.filename = filename;
    this.realImage = null;
  }
  display() {
    if (!this.realImage) {
      this.realImage = new RealImage(this.filename);
    }
    this.realImage.display();
  }
}

const image1 = new ProxyImage("image1.jpg");
image1.display(); // Logs: "Loading image: image1.jpg" followed by "Displaying image: image1.jpg"
image1.display(); // Logs: "Displaying image: image1.jpg" (no additional loading)

const image2 = new ProxyImage("image2.jpg");
image2.display(); // Logs: "Loading image: image2.jpg" followed by "Displaying image: image2.jpg"

9. 迭代器模式

描述:迭代器模式提供一种顺序访问聚合对象元素的方法,而无需暴露其内部表示。在前端中,可以用于遍历数据集合。
代码描述:

class Iterator {
  constructor(collection) {
    this.collection = collection;
    this.index = 0;
  }
  hasNext() {
    return this.index < this.collection.length;
  }
  next() {
    return this.collection[this.index++];
  }
}

const collection = [1, 2, 3, 4, 5];
const iterator = new Iterator(collection);

while (iterator.hasNext()) {
  console.log(iterator.next());
}

10. 状态模式

描述:状态模式允许对象在内部状态变化时改变其行为。在前端中,可以用于管理复杂的UI状态转换。
代码描述文章来源地址https://www.toymoban.com/news/detail-637793.html

class State {
  handle() {
    console.log("Default state handling");
  }
}

class ConcreteStateA extends State {
  handle() {
    console.log("State A handling");
  }
}

class ConcreteStateB extends State {
  handle() {
    console.log("State B handling");
  }
}

class Context {
  constructor() {
    this.state = new State();
  }
  setState(state) {
    this.state = state;
  }
  request() {
    this.state.handle();
  }
}

const context = new Context();
context.request(); // Logs: "Default state handling"

context.setState(new ConcreteStateA());
context.request(); // Logs: "State A handling"

context.setState(new ConcreteStateB());
context.request(); // Logs: "State B handling"

其他

  1. 模板方法模式:模板方法模式定义了一个算法的骨架,允许子类为其中的步骤提供具体实现。在前端中,可以用于创建可定制的UI组件。
  2. 组合模式:组合模式将对象组合成树状结构,以表示部分-整体的层次关系。在前端中,可以用于处理UI组件的嵌套结构。
  3. 备忘录模式:备忘录模式用于捕获对象的内部状态,并在需要时进行恢复。在前端中,可以用于实现撤销/重做功能或保存应用状态。
  4. 访问者模式:访问者模式用于在不改变元素类的情况下,为元素添加新的操作。在前端中,可以用于遍历并处理复杂的DOM结构或数据结构。
  5. 责任链模式:责任链模式将请求的发送者和接收者解耦,形成一个链条,并将请求沿着链条传递,直到有一个接收者能够处理它。在前端中,可以用于处理用户输入、事件处理等场景。
  6. 桥接模式:桥接模式用于将抽象部分与其实现部分分离,使它们可以独立变化。在前端中,可以用于处理不同平台或不同样式的渲染。
  7. 解释器模式:解释器模式用于定义语言的文法,并解释语言中的表达式。在前端中,可以用于处理自定义的模板语言或表达式。
  8. 享元模式:享元模式用于共享细粒度对象,以减少内存占用。在前端中,可以用于管理大量的相似对象,例如优化渲染性能。
  9. 合成模式:合成模式用于将对象组合成树状结构,以表示“整体-部分”的层次关系。在前端中,可以用于构建复杂的UI组件层次结构。
  10. 外观模式:外观模式提供了一个简化的接口,用于访问复杂子系统中的功能。在前端中,可以用于封装复杂的API调用,以提供更简洁的接口。

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

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

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

相关文章

  • 常见设计模式

    单例模式 单例对象的类必须保证只有一个实例存在,整个系统只能使用一个对象实例,优点:不会频繁地创建和销毁对象,浪费系统资源。缺点是没有抽象层,难以扩展。 单例模式的常见写法: 饿汉式单例模式的写法:线程安全 ,顾名思义,类⼀加载就创建对象,这种⽅式

    2024年02月07日
    浏览(54)
  • 常见的设计模式(模板与方法,观察者模式,策略模式)

    随着时间的推移,软件代码越来越庞大,随着而来的就是如何维护日趋庞大的软件系统。在面向对象开发出现之前,使用的是面向过程开发来设计大型的软件程序,面向过程开发将软件分成一个个单独的模块,模块之间使用函数进行组合,最后完成系统的开发,每次需要修改

    2024年01月22日
    浏览(35)
  • 【了解一下常见的设计模式】

    **设计模式(Design Pattern)**是软件开发过程中一般问题的解决方案,是无数面向对象软件开发人员的经验总结,对于软件设计开发十分重要。然而由于设计模式种类繁多,内容偏理论,缺乏开发经验对于相关概念的理解也比较困难,同时其中不乏很多类型相似的设计模式,更

    2024年02月12日
    浏览(31)
  • 常见的23种设计模式

    常见的设计模式有23种,它们分别是: 1. 工厂方法模式(Factory Method Pattern) 2. 抽象工厂模式(Abstract Factory Pattern) 3. 单例模式(Singleton Pattern) 4. 建造者模式(Builder Pattern) 5. 原型模式(Prototype Pattern) 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 过滤器模

    2024年02月07日
    浏览(38)
  • 常见的设计模式(超详细)

    确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例。 饿汉式单例模式在类加载的时候完成了实例化,因为我们将构造函数设为了私有,所有其他的对象不能通过new类创建这个类的实例,然后提供了一个公共的静态方法返回这个类的唯一实例。因为只有一个

    2024年02月14日
    浏览(35)
  • 常见的五种设计模式

    https://www.runoob.com/design-pattern/factory-pattern.html **意图:**保证一个类仅有一个实例,并提供一个访问它的全局访问点。 **主要解决:**一个全局使用的类频繁地创建与销毁。 **何时使用:**当您想控制实例数目,节省系统资源的时候。 **如何解决:**判断系统是否已经有这个单例

    2024年02月07日
    浏览(43)
  • vscode里面的常见设计模式

    vscode里面最常见的就是命令模式,无论是菜单还是按钮的点击事件大多都是以命令形式去执行的,这样的设计模式在代码的可读上更清晰明了。 在早我写过一篇有关js几种常见设计模式的demo,感兴趣的看我这篇文章:https://blog.csdn.net/woyebuzhidao321/article/details/120235389。 我们看

    2024年02月12日
    浏览(26)
  • Unity中常见的设计模式

            设计模式是一系列被广泛使用且具有相似解决方案的问题或问题实例的解决方法。它们是软件设计领域中的通用解决方案,可以帮助开发人员轻松地解决常见的软件设计问题。对于Unity开发者来说,熟悉并掌握常用的设计模式可以帮助我们更好地组织和管理代码,

    2024年02月09日
    浏览(49)
  • PHP 常见设计模式及示例

    单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的要点有三个: 一是某个类只能有一个实例; 二是它必须自行创建这个实例; 三是它必须自行向整个系统提供这个

    2024年01月25日
    浏览(32)
  • Spring中常见的设计模式

    使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性、更具有灵活、优雅,而Spring中共有九种常见的设计模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创

    2024年02月20日
    浏览(30)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包