10.24

 

实验 20:备忘录模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解备忘录模式的动机,掌握该模式的结构;

2、能够利用备忘录模式解决实际问题。

 

[实验任务一]:多次撤销

改进课堂上的用户信息操作撤销实例,使得系统可以实现多次撤销(可以使用HashMapArrayList等集合数据结构实现)。

实验要求:

1. 画出对应的类图;

 

2. 提交源代码;

class UserInfo:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print(f"创建用户信息:姓名 - {self.name},年龄 - {self.age}")

    def get_name(self):
        return self.name

    def set_name(self, new_name):
        self.name = new_name
        print(f"更新用户姓名为:{self.name}")

    def get_age(self):
        return self.age

    def set_age(self, new_age):
        self.age = new_age
        print(f"更新用户年龄为:{self.age}")

    def create_memento(self):
        return UserInfoMemento(self.name, self.age)

    def restore_from_memento(self, memento):
        self.name = memento.get_name()
        self.age = memento.get_age()
        print(f"恢复用户信息:姓名 - {self.name},年龄 - {self.age}")


class UserInfoMemento:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def get_name(self):
        return self.name

    def get_age(self):
        return self.age


class CareTaker:
    def __init__(self):
        self.memento_list = []

    def add_memento(self, memento):
        self.memento_list.append(memento)

    def get_memento(self, index):
        if 0 <= index < len(self.memento_list):
            return self.memento_list[index]
        return None

    def remove_memento(self, index):
        if 0 <= index < len(self.memento_list):
            del self.memento_list[index]


class UserInfoOperation:
    def __init__(self, user_info):
        self.user_info = user_info
        self.care_taker = CareTaker()

    def update_name(self, new_name):
        self.care_taker.add_memento(self.user_info.create_memento())
        self.user_info.set_name(new_name)

    def update_age(self, new_age):
        self.care_taker.add_memento(self.user_info.create_memento())
        self.user_info.set_age(new_age)

    def undo(self):
        last_index = len(self.care_taker.memento_list) - 1
        if last_index >= 0:
            memento = self.care_taker.get_memento(last_index)
            if memento:
                self.user_info.restore_from_memento(memento)
                self.care_taker.remove_memento(last_index)


if __name__ == "__main__":
    user_info = UserInfo("张三", 25)

    operation = UserInfoOperation(user_info)

    operation.update_name("李四")
    operation.update_age(30)
    operation.undo()
    operation.undo()

 

3. 注意编程规范。

 

 

posted @ 2024-11-27 08:21  The-rich  阅读(14)  评论(0)    收藏  举报