`

Memento(备忘机制)

    博客分类:
  • J2SE
阅读更多
写道
package com.ijo.patterns;

public class Infomation {
private String emial;

private String telphone;

public Infomation() {
}

public Infomation(String emial, String telphone) {
this.emial = emial;
this.telphone = telphone;
}

public String getEmial() {
return emial;
}

public void setEmial(String emial) {
this.emial = emial;
}

public String getTelphone() {
return telphone;
}

public void setTelphone(String telphone) {
this.telphone = telphone;
}

public String toString() {
return "\temial\t" + emial + "\ttelphone\t" + telphone;
}
}

 

写道
package com.ijo.patterns;

public class Name {
private String fristName;
private String lastName;

public Name() {
super();
}

public Name(String fristName, String lastName) {
super();
this.fristName = fristName;
this.lastName = lastName;
}

public String getFristName() {
return fristName;
}

public void setFristName(String fristName) {
this.fristName = fristName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}


}

 

写道
package com.ijo.patterns;

import java.util.List;

public class User {
private int age;

private String idCard;

private Name name;

private List<Infomation> informations;

public User() {
}

public User(int age, String idCard, Name name, List<Infomation> informations) {
super();
this.age = age;
this.idCard = idCard;
this.name = name;
this.informations = informations;
}

public User(User user) {
this.age = user.getAge();
this.idCard = user.getIdCard();
this.name = user.getName();
this.informations = user.getInformations();
}

public List<Infomation> getInformations() {
return informations;
}

public void setInformations(List<Infomation> informations) {
this.informations = informations;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getIdCard() {
return idCard;
}

public void setIdCard(String idCard) {
this.idCard = idCard;
}

public Name getName() {
return name;
}

public void setName(Name name) {
this.name = name;
}

public String toString() {
String str = "aget\t" + age + "\tIdcard\t" + idCard + "\tfirst+\t"
+ name.getFristName() + "\tlastname+\t" + name.getLastName();
for (Infomation infomation : informations) {
str = str + infomation.toString();
}
return str;
}
}

  

写道
package com.ijo.patterns;

public class FactoryUser {
public static User getUser(User user){
return new User(user);
}
}

  

写道
package com.ijo.patterns;

import java.util.ArrayList;
import java.util.List;

public class Demo {
public static void main(String[] args) {
List<Infomation> list = new ArrayList<Infomation>();
list.add(new Infomation("ming@yahoo.com.cn", "100"));
list.add(new Infomation("ming@hotmail", "120"));
User user = new User(20, "sichuanidcard", new Name("zhang", "san"),
list);
System.out.println(user.toString());
User userCopy = FactoryUser.getUser(user);
System.out.println(userCopy.toString());
System.out.println();
user.setName(new Name("wang", "wu"));
list = user.getInformations();
Infomation infomation = list.get(0);
infomation.setEmial("test@test.com");
infomation.setTelphone("888");
System.out.println(user.toString());
System.out.println(userCopy.toString());
System.out.println();
list = new ArrayList<Infomation>();
list.add(new Infomation("jiang@yahoo.com.cn", "123"));
list.add(new Infomation("jiang@163.com", "456"));
user.setInformations(list);
System.out.println(user.toString());
System.out.println(userCopy.toString());

}
}

 

结果:

写道
aget 20 Idcard sichuanidcard first+ zhang lastname+ san emial ming@yahoo.com.cn telphone 100 emial ming@hotmail telphone 120
aget 20 Idcard sichuanidcard first+ zhang lastname+ san emial ming@yahoo.com.cn telphone 100 emial ming@hotmail telphone 120

aget 20 Idcard sichuanidcard first+ wang lastname+ wu emial test@test.com telphone 888 emial ming@hotmail telphone 120
aget 20 Idcard sichuanidcard first+ zhang lastname+ san emial test@test.com telphone 888 emial ming@hotmail telphone 120

aget 20 Idcard sichuanidcard first+ wang lastname+ wu emial jiang@yahoo.com.cn telphone 123 emial jiang@163.com telphone 456
aget 20 Idcard sichuanidcard first+ zhang lastname+ san emial test@test.com telphone 888 emial ming@hotmail telphone 120

由结果看来,主要是是一个浅拷贝,不是深拷贝。 这种设计模式很容易出错的了

分享到:
评论

相关推荐

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    C++设计模式课件19_Memento_备忘录.pdf

    - 类封装:备忘录类通常被设计为不可修改,这就需要通过类的封装机制限制对备忘录状态的访问。 - 智能指针:为了避免内存泄漏和管理资源,可以使用智能指针来自动管理备忘录实例的生命周期。 备忘录模式在实际应用...

    备忘录模式(Memento) 注册时用的

    同时,为了防止内存泄漏,可能需要使用智能指针或垃圾回收机制来管理备忘录对象的生命周期。 总之,备忘录模式在需要记录和恢复对象状态的场景中非常有用,尤其是在注册这类需要保护用户数据的操作中。通过理解并...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以...在C++中实现备忘录模式,利用智能指针和友元机制,能够确保内存管理的正确性和安全性。

    C++设计模式代码资源19_Memento.zip

    同时,为了保护备忘录的封装性,可以使用私有继承和友元机制来限制对备忘录内容的访问。 以下是一个简单的C++ Memento模式的示例: ```cpp class Originator { private: int state; // ... public: Originator...

    C#备忘录模式(Memento Pattern)实例教程

    备忘录模式(Memento Pattern)是一种设计模式,它允许...总的来说,备忘录模式在C#中提供了安全地保存和恢复对象状态的机制,是实现撤销/重做功能的一种有效设计模式。在实际开发中,可以根据具体需求灵活运用和优化。

    备忘录模式

    **备忘录模式**(Memento Pattern)是一种用于在不破坏对象封装性的情况下,保存并恢复对象内部状态的行为型设计模式。它允许用户在任意时刻撤销或重做某个操作,从而达到一种“后悔药”的效果。 备忘录模式主要...

    设计模式-备忘录模式(讲解及其实现代码)

    2. **备忘录(Memento)**:备忘录类用于存储发起人的状态,它包含了发起人需要备份的所有数据。备忘录通常有两个接口:一个是供发起人设置和获取状态的内部接口,另一个是供管理者操作的外部接口,确保只允许读取...

    备忘录模式-极客学院-java-课件代码

    2. **备忘录(Memento)角色**:备忘录存储发起人的内部状态,但不能有除了发起人之外的其他类访问这些信息。备忘录通常有两个接口:一个是公开的,只允许发起人读写;另一个是私有的,用于存储和恢复状态。 3. **...

    18备忘录模式.zip

    1. **备忘录类(Memento)** 备忘录类是保存原发器对象内部状态的关键。它通常包含一组数据成员,用于存储原发器对象的私有状态。备忘录类可以有两个版本:一个是具体备忘录,它实现了存储和恢复对象状态的具体操作...

    第4.4章 备忘录模式1

    2. **备忘录(Memento)**:备忘录对象存储发起者的状态,但对外界应该是不可见的。在示例中,`Memento` 类仅有一个私有的 `state` 属性,通过构造函数从发起者那里获取状态,而提供了一个 `getState` 方法供发起者...

    深入浅出设计模式——备忘录模式(MementoPattern)

    【备忘录模式(Memento Pattern)】是一种设计模式,主要目的是为了在不破坏对象封装性的前提下,能够保存和恢复对象的内部状态。这种模式常用于实现撤销/重做功能,例如在文本编辑器、游戏或数据库管理系统中。通过...

    设计模式之备忘录模式

    2. 备忘录(Memento):存储原始对象的内部状态,通常是一个私有类,只提供给原始对象访问,以保持封装性。 3. 客户端(Client):创建原始对象,并使用备忘录对象来保存和恢复对象的状态。 在实现备忘录模式时,有...

    java设计模式之备忘录模式

    备忘录模式是一种在软件设计中...在Java中,我们可以利用Java的序列化机制或者自定义数据结构来实现备忘录,以满足不同场景的需求。在进行复杂业务逻辑处理时,合理使用备忘录模式可以大大提高代码的可读性和可维护性。

    C++设计模式之备忘录模式(Memento)

    当我们在实际应用中需要提供撤销机制,当一个对象可能需要再后续操作中恢复其内部状态时,就需要使用备忘录模式。其本质就是对象的序列化和反序列化的过程,支持回滚操作。 作用 在不破坏封装性的前提下,捕获一个...

    GoF 23种设计模式的详解与应用

    详细介绍GoF设计模式以及应用... 创建模式:设计模式之Factory,设计模式之Prototype(原型),设计模式之Builder,设计模式之Singleton(单态)....行为模式:设计模式之Template,设计模式之Memento(备忘机制).................

    JAVA设计模式chm文档

    设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter...

    设计模式文档 chm

    设计模式之Memento(备忘机制) 设计模式之Observer 设计模式之Chain of Responsibility(职责链) 设计模式之Command 设计模式之State 设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter...

    Android手机备忘录的设计与实现开题报告.pdf

    2. **数据共享访问**:允许用户在不同设备之间同步备忘录数据,可能通过集成Google云端服务或者实现自己的云同步机制来达到这一目标。 3. **列表浏览**:提供用户友好的界面,让用户能以列表形式查看和管理他们的...

Global site tag (gtag.js) - Google Analytics