IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

大话设计模式之备忘录模式

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

备忘录模式

  在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

84_1.png

涉及到的角色描述

  originator(发起人): 负责创建一个备忘录memento,用来记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。originator可根据需要决定memento存储它的哪些内部状态

  memento(备忘录): 负责存储originator的内部状态,并可防止originator以外的其他对象访问备忘录memento。备忘录有两个接口,caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。originator能够看到一个宽接口,允许它访问返回先前状态所需的所有数据。

  caretaker(管理者): 负责保存好备忘录memento,不能对备忘录的内容进行操作或检查。

优点:

  1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。

  2、实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点:

  消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

使用场景:

  1、需要保存/恢复数据的相关状态场景。

  2、提供一个可回滚的操作。

具体代码实现

  创建备忘录

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 备忘录类
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class Memento {

    private String state;

    //构造方法将相关数据导入
    Memento(String state){
        this.state = state;
    }

    //需要保存的数据属性,可以是多个
    public String getState() {
        return state;
    }


}

  创建发起人

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 发起人
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class Originator {
    private String state;//需要保存的属性

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    /**
     * 创建备忘录,将当前需要保存的数据导入并实例化一个memento对象
     * @return
     */
    public Memento setStateToMemento(){
        return new Memento(state);
    }

    /**
     * 恢复备忘录,将memento导入并将相关数据恢复
     * @param memento
     */
    public void getStateFromMemento(Memento memento){
        state = memento.getState();
    }

    /**
     * 数据展示
     */
    public void show(){
        System.out.println(state);
    }
}

  创建管理者

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description: 管理者
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class CareTaker {
    private Memento memento;//得到或设置备忘录

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

  客户端

package com.chenpt.designModel.mementoModel;

/**
 * @Author: chen
 * @Description:
 * @Date: created in 2018/8/28
 * @Modified By:
 */
public class MainTest {

    public static void main(String[] a){
        Originator originator = new Originator();
        originator.setState("on");
        originator.show();

        CareTaker careTaker = new CareTaker();
        careTaker.setMemento(originator.setStateToMemento());

        originator.setState("off");
        originator.show();

        originator.getStateFromMemento(careTaker.getMemento());
        originator.show();
    }

}
//执行结果
on
off
on

  

文章永久链接:https://tech.souyunku.com/?p=39874


Warning: A non-numeric value encountered in /data/wangzhan/tech.souyunku.com.wp/wp-content/themes/dux/functions-theme.php on line 1154
赞(70) 打赏



未经允许不得转载:搜云库技术团队 » 大话设计模式之备忘录模式

IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码
IDEA2023.1.3破解,IDEA破解,IDEA 2023.1破解,最新IDEA激活码

评论 抢沙发

大前端WP主题 更专业 更方便

联系我们联系我们

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

微信扫一扫打赏

微信扫一扫打赏


Fatal error: Uncaught Exception: Cache directory not writable. Comet Cache needs this directory please: `/data/wangzhan/tech.souyunku.com.wp/wp-content/cache/comet-cache/cache/https/tech-souyunku-com/index.q`. Set permissions to `755` or higher; `777` might be needed in some cases. in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php:367 Stack trace: #0 [internal function]: WebSharks\CometCache\Classes\AdvancedCache->outputBufferCallbackHandler() #1 /data/wangzhan/tech.souyunku.com.wp/wp-includes/functions.php(5109): ob_end_flush() #2 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(303): wp_ob_end_flush_all() #3 /data/wangzhan/tech.souyunku.com.wp/wp-includes/class-wp-hook.php(327): WP_Hook->apply_filters() #4 /data/wangzhan/tech.souyunku.com.wp/wp-includes/plugin.php(470): WP_Hook->do_action() #5 /data/wangzhan/tech.souyunku.com.wp/wp-includes/load.php(1097): do_action() #6 [internal function]: shutdown_action_hook() #7 {main} thrown in /data/wangzhan/tech.souyunku.com.wp/wp-content/plugins/comet-cache/src/includes/traits/Ac/ObUtils.php on line 367