|
|
'''
|
|
|
在书城的业务背景中,外观模式(Facade Pattern)可以用于提供一个简化的接口,以隐藏系统的复杂性。
|
|
|
假设书城提供了多种服务,如用户认证、购物车管理、订单处理等,外观模式可以将这些服务整合到一个统一的接口中,
|
|
|
使客户端能够更方便地使用这些服务。
|
|
|
下面是一个简单的实现代码示例,展示如何使用外观模式来整合书城的不同服务:
|
|
|
'''
|
|
|
|
|
|
# 用户服务类
|
|
|
class UserService:
|
|
|
def authenticate(self, username, password):
|
|
|
# 这里是用户认证的实现代码
|
|
|
print(f"Authenticating user {username}...")
|
|
|
return True # 假设认证总是成功
|
|
|
|
|
|
# 购物车服务类
|
|
|
class CartService:
|
|
|
def add_to_cart(self, user_id, book_id):
|
|
|
# 这里是将书籍添加到购物车的实现代码
|
|
|
print(f"User {user_id} added book {book_id} to the cart.")
|
|
|
|
|
|
def remove_from_cart(self, user_id, book_id):
|
|
|
# 这里是从购物车中移除书籍的实现代码
|
|
|
print(f"User {user_id} removed book {book_id} from the cart.")
|
|
|
|
|
|
# 订单服务类
|
|
|
class OrderService:
|
|
|
def create_order(self, user_id, cart_items):
|
|
|
# 这里是创建订单的实现代码
|
|
|
print(f"Creating order for user {user_id} with items {cart_items}...")
|
|
|
return "OrderID123" # 假设返回一个订单ID
|
|
|
|
|
|
# 书城外观类
|
|
|
class BookstoreFacade:
|
|
|
def __init__(self):
|
|
|
self.user_service = UserService()
|
|
|
self.cart_service = CartService()
|
|
|
self.order_service = OrderService()
|
|
|
|
|
|
def login_and_add_to_cart(self, username, password, book_id):
|
|
|
if self.user_service.authenticate(username, password):
|
|
|
print("Login successful.")
|
|
|
# 假设用户ID为1(实际应用中应该通过认证服务获取)
|
|
|
user_id = 1
|
|
|
self.cart_service.add_to_cart(user_id, book_id)
|
|
|
else:
|
|
|
print("Login failed.")
|
|
|
|
|
|
def checkout(self, username, password):
|
|
|
if self.user_service.authenticate(username, password):
|
|
|
print("Login successful.")
|
|
|
# 假设用户ID为1(实际应用中应该通过认证服务获取)
|
|
|
user_id = 1
|
|
|
# 假设获取购物车项目的方法存在(实际应用中需要实现)
|
|
|
cart_items = self.get_cart_items(user_id)
|
|
|
if cart_items:
|
|
|
order_id = self.order_service.create_order(user_id, cart_items)
|
|
|
print(f"Order created with ID: {order_id}")
|
|
|
else:
|
|
|
print("Your cart is empty.")
|
|
|
else:
|
|
|
print("Login failed.")
|
|
|
|
|
|
def get_cart_items(self, user_id):
|
|
|
# 这里应该有一个方法来获取购物车中的项目,但为了简化示例,我们直接返回一个列表
|
|
|
return [1, 2, 3] # 假设的书籍ID列表
|
|
|
|
|
|
# 客户端代码
|
|
|
if __name__ == "__main__":
|
|
|
bookstore = BookstoreFacade()
|
|
|
|
|
|
# 用户登录并添加书籍到购物车
|
|
|
bookstore.login_and_add_to_cart("alice", "password123", "book456")
|
|
|
|
|
|
# 用户结账创建订单
|
|
|
bookstore.checkout("alice", "password123") |