''' 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 在书城的业务背景中,代理模式(Proxy Pattern)可以应用于多种场景,例如实现延迟加载、访问控制、远程代理等。 下面示例展示如何使用代理模式来控制对书城中书籍对象的访问。 假设我们有一个Book类,代表书城中的书籍,和一个BookProxy类,作为Book的代理类,来控制对书籍的访问。 ''' # 书籍类 class Book: def __init__(self, title, author, price): self.title = title self.author = author self.price = price self.is_loaded = False # 假设书籍内容初始时是未加载的 def load_content(self): # 模拟加载书籍内容的过程,这里仅打印一条消息 print(f"Loading content for book '{self.title}' by {self.author}...") self.is_loaded = True def display(self): if not self.is_loaded: self.load_content() print(f"Book Title: {self.title}") print(f"Author: {self.author}") print(f"Price: {self.price}") print("Content is loaded and displayed.") # 书籍代理类 class BookProxy: def __init__(self, book): self.book = book def display(self): # 在显示书籍信息之前,代理可以控制一些额外的操作 # 比如检查用户权限、记录访问日志等 # 这里我们模拟一个简单的访问控制 print("Checking access permissions...") # 假设权限检查通过,调用实际对象的display方法 self.book.display() # 客户端代码 if __name__ == "__main__": # 创建一个书籍对象(假设内容尚未加载) book = Book("The Great Gatsby", "F. Scott Fitzgerald", 29.99) # 创建一个书籍代理对象 book_proxy = BookProxy(book) # 通过代理来访问书籍信息 book_proxy.display() ''' 在这个示例中,Book类有一个load_content方法来模拟加载书籍内容的过程,以及一个display方法来显示书籍的信息。 在实际应用中,load_content可能会执行更加复杂的操作,如从数据库或远程服务器加载数据。 BookProxy类作为代理,包装了对Book对象的访问。 在这个简单的例子中,它在调用display方法之前执行了一个模拟的权限检查。 在实际应用中,代理类可以执行各种操作,如缓存、懒加载、权限验证等。 客户端代码通过创建BookProxy对象来间接访问Book对象,而不是直接访问。 这种方式提供了一种灵活的控制机制,使得可以在不修改原始类的情况下增加额外的功能或控制逻辑。 '''