iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >Memento模式与Prototype模式结合
  • 303
分享到

Memento模式与Prototype模式结合

2023-06-03 04:06:18 303人浏览 八月长安
摘要

我是菜鸟,刚开始学习设计模式,参考jdon的设计模式这本书,里面关于 Memento模式的例子如下(本人稍加修改)[@more@]我在另一个网站上的文章: Http://www.matrix.org.cn/thread.shtml?topi

我是菜鸟,刚开始学习设计模式,参考jdon的设计模式这本书,里面关于 Memento模式的例子如下(本人稍加修改)

[@more@]我在另一个网站上的文章:
Http://www.matrix.org.cn/thread.shtml?topicId=5c99e4e2-90d7-11dc-b8c0-a384f0e97a57&forumId=20

我是菜鸟,刚开始学习设计模式,参考jdon的设计模式这本书,里面关于 Memento模式的例子如下(本人稍加修改):

1. 原始数据类

public class Originator {

protected int number = 0;
protected String file = null;

public Originator() {
}

public void setNumber(int number){
this.number = number;
}

public int getNumber(){
return number;
}

public void setFile(String file){
this.file = file;
}

public String getFile(){
return file;
}

// 创建一个Memento
public Memento getMemento() {
return new Memento(this);
}

// 恢复到原始值
public void setMemento(Memento m) {
number = m.number;
file = m.file;
}
}

2.储存类
public class Memento {

protected int number;
protected String file = null;

public Memento(Originator o) {
number = o.number;
file = o.file;
}
}

3.测试应用:
public void testMemento(){

Originator org = new Originator();
org.setNumber(10);
org.setFile("org_File");
Memento mem = new Memento(org);

org.setFile("new_File");
org.setNumber(20);

org.setMemento(mem);

assertEquals(org.getFile(),"org_File");
assertEquals(org.getNumber(),10);

}


测试ok! 可以恢复原来的值。页面应用中的session,还有数据层的持久层 感觉也用了这种方法。
缺点:如果数据量很大时,不仅写备份类不方便,而且也很耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.

想到以前学过的 Prototype 模式,结合如下:

1.原始类
public class Originator implements Cloneable {

protected int number = 0;
protected String file = null;

protected Originator org = null;//用于存储的类

public Originator() {

}

public void setNumber(int number) {
this.number = number;
}

public int getNumber() {
return number;
}

public void setFile(String file) {
this.file = file;
}

public String getFile() {
return file;
}

//取出原始值
public Originator getOriginator() {
return org;
}

//恢复到原始值
public void setOriginator() {
org =(Originator)this.clone();
}

//prototype 方法
public Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("Originator is not Cloneable");
}
return object;
}
}

2.测试类如下:
public void testPrototype(){
Originator org = new Originator();
org.setNumber(10);
org.setFile("org_File");

//Memento mem = new Memento(org);

org.setOriginator();//将原数据放入存储类中

org.setFile("new_File");
org.setNumber(20);

///org.setMemento(mem);

org.getOriginator();//得到原来值
///org.setMemento(mem);

assertEquals(org.getOriginator().getFile(),"org_File");
assertEquals(org.getOriginator().getNumber(),10);
}

结果一样,这里简单了类的编写,不过可能 还是要浪费内存。

--结束END--

本文标题: Memento模式与Prototype模式结合

本文链接: https://www.lsjlt.com/news/232613.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Memento模式与Prototype模式结合
    我是菜鸟,刚开始学习设计模式,参考jdon的设计模式这本书,里面关于 Memento模式的例子如下(本人稍加修改)[@more@]我在另一个网站上的文章: http://www.matrix.org.cn/thread.shtmltopic...
    99+
    2023-06-03
  • prototype模式结构是怎样的
    本篇内容介绍了“prototype模式结构是怎样的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!结 构按照UML的规则,prototype应...
    99+
    2023-06-19
  • .Net行为型设计模式之备忘录模式(Memento)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、备忘录模式的代码实现六、备忘录模式的实现要点:1、备忘录模式的主要优点有:2...
    99+
    2024-04-02
  • PHP结构型模式之组合模式
    目录组合模式(Composite Pattern)是什么组合模式的优点组合模式的实现组合模式的使用总结组合模式(Composite Pattern)是什么 组合模式是一种结构型模式,...
    99+
    2023-05-14
    PHP结构型模式 PHP组合模式
  • C++中怎么应用Memento模式
    C++中怎么应用Memento模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C++ Memento模式代码示例:#include< iost...
    99+
    2023-06-17
  • Python设计模式结构型组合模式
    目录一、组合模式二、应用场景三、代码示例一、组合模式 组合,将多个对象组合成为一个树状结构,来表示业务逻辑上的层次。组合模式使得用户对单个对象和组合对象的使用具有一致性。 比如,描述...
    99+
    2024-04-02
  • .Net创建型设计模式之原型模式(Prototype)
    目录一、动机(Motivation)二、意图(Intent)三、结构(Structure)四、模式的组成五、 原型模式的具体实现六、原型模式的实现要点:1、原型模式的优点:2、原型模...
    99+
    2024-04-02
  • 什么是Prototype原型模式
    本篇内容介绍了“什么是Prototype原型模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在设计模...
    99+
    2024-04-02
  • Prototype原型模式怎么实现
    本篇内容介绍了“Prototype原型模式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! Pro...
    99+
    2024-04-02
  • Golang Facade模式与模块化开发的完美结合
    Golang中的Facade模式与模块化开发可以很好地结合在一起,实现代码的可维护性、可扩展性和可测试性。Facade模式是一种结构...
    99+
    2023-10-08
    Golang
  • Java结构型模式中的组合模式详解
    目录一.介绍二.UML类图1.透明方式2.安全方式三.具体代码四.使用场景五.优点一.介绍 组合模式(Composite Pattern)属于结构型模式。组合模式又叫作部分整体模式,...
    99+
    2023-02-16
    Java结构型模式 Java组合模式
  • .Net结构型设计模式之组合模式(Composite)
    目录一、动机(Motivate)二、意图(Intent)三、结构图(Structure)四、模式的组成五、组合模式的具体代码实现1、透明式的组合模式2、安全式的组合模式六、组合模式的...
    99+
    2024-04-02
  • 结合ES6 编写 JavaScript 设计模式中的结构型模式
    目录前言什么是设计模式?结构型设计模式适配器模式实例桥接模式实例组合模式实例装饰者模式实例门面模式实例享元模式实例代理模式实例前言 本文将对 20 多种 JavaScript 设计模...
    99+
    2024-04-02
  • PHP 设计模式与 OOP 原则的结合
    在 php 开发中,设计模式和 oop 原则的结合至关重要: 1. 设计模式提供可重用的解决方案,满足常见开发问题; 2. oop 原则确保代码的可维护性和灵活性; 3. 将设计模式(如...
    99+
    2024-05-07
    php 设计模式 mysql
  • Java结构型设计模式之组合模式详解
    目录组合模式应用场景优缺点主要角色组合模式结构分类透明组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用安全组合模式创建抽象根节点创建树枝节点创建叶子节点客户端调用组合模式 组...
    99+
    2024-04-02
  • PHP结构型模式之组合模式怎么实现
    今天小编给大家分享一下PHP结构型模式之组合模式怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。组合模式(Compos...
    99+
    2023-07-05
  • Java结构型设计模式之组合模式CompositePattern详解
    目录概述三大组件应用案例顶层组件OrganizationComponentComposite组件叶子节点客户端测试UML类图总结概述 组合模式(Composite Pattern),...
    99+
    2022-11-13
    Java Composite Pattern Java 组合模式
  • Java设计模式:组合模式
    目录概述结构组合模式案例分析总结在本讲,我们来学习一下结构型模式里面的第六个设计模式,即组合模式。 概述 在学习组合模式之前,我们先来看下面这张图。 对于以上这张图大家应该很熟悉,...
    99+
    2024-04-02
  • 详细总结Java组合模式
    目录一、前言二、介绍三、实现一、前言 组合模式,又叫部分整体模式,是用于把一组相似的对象,当做单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式...
    99+
    2024-04-02
  • pytthon—day8 读写模式的结合
    w:写指没有新建文件,有文件就清空 w=open('1.txt','w',encoding='utf-8') w.write('000\n') 在写入数据时,需要及时处理内存空间,不然内存溢出到值数据丢失 w.flush() w....
    99+
    2023-01-31
    模式 pytthon
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作