''' 备忘录模式(Memento Pattern): 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 备忘录模式(Memento Pattern)可以用来保存和恢复书籍对象的内部状态, 例如用户可能想要保存他们当前阅读的书籍状态(比如阅读进度、高亮部分等),以便之后可以恢复到这个状态。 ''' # 书籍类,包含阅读状态 class Book: def __init__(self, title, author): self.title = title self.author = author self.page = 1 # 初始页码 self.highlights = [] # 高亮部分 def read(self, page): self.page = page print(f"Reading page {self.page} of '{self.title}' by {self.author}") def highlight(self, text): self.highlights.append(text) print(f"Highlighted text: {text}") def get_current_state(self): return BookMemento(self.page, self.highlights[:]) def restore_state(self, memento): self.page = memento.get_page() self.highlights = memento.get_highlights() # 备忘录类,用于保存书籍状态 class BookMemento: def __init__(self, page, highlights): self.page = page self.highlights = highlights def get_page(self): return self.page def get_highlights(self): return self.highlights # 客户端代码 if __name__ == "__main__": # 创建书籍对象 book = Book("The Hobbit", "J.R.R. Tolkien") # 阅读和高亮文本 book.read(50) book.highlight("Gollum's precious!") # 保存当前状态 memento = book.get_current_state() # 改变状态 book.read(100) book.highlight("The dragon is coming!") # 恢复状态 print("Restoring state...") book.restore_state(memento) print(f"Current page is {book.page}") print("Highlighted texts:") for highlight in book.highlights: print(highlight) ''' 在这个示例中,Book 类代表了一本书,包含了页码和高亮部分等状态信息。BookMemento 类用于保存书籍的某一时刻的状态。Book 类提供了 get_current_state 方法来创建并返回一个包含当前阅读状态的 BookMemento 对象。同样地,Book 类也提供了 restore_state 方法来从 BookMemento 对象中恢复状态。 客户端代码创建了一个书籍对象,对其进行了阅读和高亮操作,然后保存了当前状态。之后改变了书籍的状态,并使用之前保存的状态恢复了书籍对象。 这样,用户就可以在需要的时候回到之前的阅读状态,无论是在同一个会话中还是在不同的会话中。这种模式在需要提供“撤销”或“恢复”功能的应用中非常有用。 '''