''' 命令模式(Command Pattern)是一种行为设计模式,它封装了一个请求作为一个对象,从而让你使用不同的请求把客户端与服务端操作解耦。在书城的业务背景中,命令模式可以用来实现例如添加购物车项、结算订单、发送通知等操作。 下面是一个简单的使用Python实现的命令模式示例,以书城的购物车操作为例 ''' # 购物车类 class ShoppingCart: def __init__(self): self.items = [] def add_item(self, book_id, quantity): self.items.append({'book_id': book_id, 'quantity': quantity}) print(f"Added {quantity} of book ID {book_id} to the cart.") def remove_item(self, book_id): self.items = [item for item in self.items if item['book_id'] != book_id] print(f"Removed book ID {book_id} from the cart.") # 命令接口 class Command: def execute(self): pass # 具体命令类 - 添加购物车项 class AddToCartCommand(Command): def __init__(self, shopping_cart, book_id, quantity): self.shopping_cart = shopping_cart self.book_id = book_id self.quantity = quantity def execute(self): self.shopping_cart.add_item(self.book_id, self.quantity) # 具体命令类 - 移除购物车项 class RemoveFromCartCommand(Command): def __init__(self, shopping_cart, book_id): self.shopping_cart = shopping_cart self.book_id = book_id def execute(self): self.shopping_cart.remove_item(self.book_id) # 调用者(Invoker)类 class Invoker: def __init__(self): self.commands = [] def store_and_execute_command(self, command): self.commands.append(command) command.execute() # 客户端代码 if __name__ == "__main__": cart = ShoppingCart() invoker = Invoker() # 创建添加购物车项命令 add_command = AddToCartCommand(cart, "12345", 2) invoker.store_and_execute_command(add_command) # 创建移除购物车项命令 remove_command = RemoveFromCartCommand(cart, "12345") invoker.store_and_execute_command(remove_command) ''' 在这个例子中,我们有一个ShoppingCart类,它有两个方法:add_item和remove_item,用于添加和移除购物车项。然后,我们定义了一个命令接口Command和一个调用者Invoker。Invoker可以存储并执行命令。 具体命令类AddToCartCommand和RemoveFromCartCommand实现了Command接口,并在execute方法中调用了ShoppingCart的相应操作。 客户端代码创建了ShoppingCart实例和Invoker实例,并创建了添加和移除购物车项的具体命令对象。这些命令对象通过调用者的store_and_execute_command方法被存储和执行。 这个命令模式的实现将购物车操作和实际的执行逻辑解耦,允许客户端在不知道具体操作的情况下存储和执行命令。这对于支持撤销操作、记录命令历史、排队命令等高级功能非常有用。 '''