前端设计模式——备忘录模式


前端设计模式——备忘录模式

备忘录模式(Memento Pattern):是一种行为型设计模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。在JavaScript中,可以使用闭包来实现备忘录模式。

备忘录模式通常用于处理用户界面的状态。当用户与应用程序交互时,应用程序会根据用户的输入更改其状态。它可以使您保存和还原应用程序状态的快照,以便用户可以随时返回以前的状态。

以下是备忘录模式的几个关键组件:

1. Originator(发起人):负责创建要保存状态的对象,并在需要时将其状态存储到 Memento 中。
1. Memento(备忘录):存储发起人对象的状态。
1. Caretaker(管理者):负责存储和管理 Memento 对象。Caretaker 对象不会直接访问 Memento 对象,而是通过发起人对象来获取它。

在前端中,备忘录模式的一个实际应用是浏览器历史记录。当用户在浏览器中导航时,浏览器将当前页面的状态存储到历史记录中。用户可以随时返回以前的状态,并恢复页面的先前状态。

下面是一个简单的备忘录模式实现示例:

// Originator
class Editor {
  constructor() {
    this.content = '';
  }

  type(words) {
    this.content += words;
  }

  save() {
    return new EditorMemento(this.content);
  }

  restore(memento) {
    this.content = memento.getContent();
  }
}

// Memento
class EditorMemento {
  constructor(content) {
    this.content = content;
  }

  getContent() {
    return this.content;
  }
}

// Caretaker
class History {
  constructor() {
    this.states = [];
  }

  push(state) {
    this.states.push(state);
  }

  pop() {
    return this.states.pop();
  }
}

// Usage
const editor = new Editor();
const history = new History();

// 编辑器输入内容
editor.type('Hello, ');
editor.type('World!');

// 将当前状态保存到备忘录中,并将备忘录添加到历史记录中
history.push(editor.save());

// 继续编辑器输入内容
editor.type(' How are you today?');

// 输出当前编辑器内容
console.log(editor.content); // 'Hello, World! How are you today?'

// 从历史记录中恢复上一个状态
editor.restore(history.pop());

// 输出恢复的编辑器内容
console.log(editor.content); // 'Hello, World!'

 

在这个例子中,`Editor` 类是发起人,它具有保存和恢复状态的方法。`EditorMemento` 类是备忘录,它存储发起人对象的状态。`History` 类是管理者,它存储和管理备忘录对象。

在使用备忘录模式时,我们首先创建一个编辑器对象 `editor`,并将其状态保存到历史记录中。然后我们继续输入一些内容,并再次将状态保存到历史记录中。接着,我们从历史记录中恢复先前的状态,并输出恢复的编辑器内容。

需要注意的是,在 JavaScript 中,我们可以直接访问对象的属性,而不需要使用 getter 和 setter 方法,因此在上面的示例中,我们可以直接使用 `editor.content` 来访问编辑器的内容。

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:前端设计模式——备忘录模式 - Python技术站

(0)
上一篇 2023年4月10日 上午8:42
下一篇 2023年4月10日

相关文章

  • 前端设计模式——桥接模式

    前端设计模式——桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式,用于将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构,从而能够更好地组合和扩展这些类。 在前端开发中,桥接模式通常用于处理 UI 组件的复杂性,将组件的抽象与实现分离,使得它们能够独立地变化。通过桥接模式,我们可以让组件的行为和样式分别独立变化,从而避免在…

    设计模式 2023年4月10日
    00
  • 设计模式(七)—原始模型模式

    1、简介:      原始模型模式属于对象的创建模式。通过给出一个原型对象来指明要创建对象的类型,然后用复制原型对象的方法来创建出更多同类型的对象。      Java所有的类都是从java.lang.Object类继承来的,Object类提供clone()方法对对象进行复制。对象的复制有一个基本问题,就是对象通常都有对其它的对象的引用, 当使用Object…

    设计模式 2023年4月11日
    00
  • 程序员内功心法-设计模式

    设计模式总共分为三大类 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。 行为型模式:用于描述类或对象之间怎样…

    设计模式 2023年4月13日
    00
  • 单例模式只会懒汉饿汉?读完本篇让你面试疯狂加分

    前言 说到设计模式,面试排在第一位的十有八九是单例模式,这一定是大部分人从入门到面试工作都避不开的基础知识。 但单例模式不仅有懒汉模式和饿汉模式两种写法,往往我们掌握的都是最基础的写法,如果你有阅读过类似spring这样的知名框架源码,一定会发现他们的单例模式写法和你所掌握的完全不同。 本篇就给大家带来单例模式从基础->最优->额外推荐的写法,帮…

    设计模式 2023年4月11日
    00
  • [Js-设计模式]单例模式(饿汉,懒汉,登记式)

    ·单例模式的特点:   1. 单例类只能有一个实例。   2. 单例类必须自己创建自己的唯一实例。   3. 单例类必须给所有其他对象提供这一实例。 ·各种单例模式的特点:   ·懒汉式是延时加载,在需要的时候才创建对象,避免内存浪费,但存在线程安全问题。   ·饿汉式线程安全,类一加载就实例化对象,所以要提前占用系统资源。   ·登记式单例模式克服了饿汉以…

    设计模式 2023年4月11日
    00
  • Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码—组合模式之Menus

    . . . . . 运行结果: 特别感谢:左保权 兄不惜晚上休息时间给小弟解答问题!~

    设计模式 2023年4月11日
    00
  • 《Head First 设计模式》阅读笔记(七)——适配器和外观模式

    适配器模式和外观模式有些相似,甚至其实现方式也相似,不同的只是他们的侧重点。 适配器模式,我想用处应该非常广泛,特别是对于环境多变的场合,其定义如下: 将一个类的接口,转换成客户希望的另一个接口。适配器让原本不兼容的类可以合作无间。 这解决了本章开篇的那个需求:“将一个方块放入一个圆洞中!”。 也就是说,适配器通过接口转换解决了兼容性问题。那么他是通过什么方…

    设计模式 2023年4月12日
    00
  • 《大话设计模式》笔记三

     前言 不知道做信息化的同行们,是否有这样的感受,一个企业的信息化得成败很大程度上取决于公司领导的知识水平和对信息化的认识,我现在有切肤的感受,让人很有挫败感,往往一个软件推行到领导这一阶层就推行不下去,有的领导连电脑都不会用。所以这次废言几句,找工作的时候也要对公司的管理者进行调查,免得到时后悔。 笔记 1.模板方法模式(TemplateMethod): …

    设计模式 2023年4月9日
    00
合作推广
合作推广
分享本页
返回顶部