实现策略模式和模板方法模式示例,添加支付策略和烹饪流程,增强代码可读性

This commit is contained in:
2026-01-07 19:27:14 +08:00
parent 5fbbada4b7
commit e5be1b62c2
6 changed files with 268 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
"""
实例:
汤宝宝成为了收银员,消费者可以使用现金或者支付宝支付。
"""
from abc import ABC, abstractmethod
class Strategy(ABC):
@abstractmethod
def pay(self, amount: float) -> str:
pass
class CashPayment(Strategy):
def pay(self, amount: float) -> str:
return(f"使用现金支付了 {amount:.2f} 元。")
class AlipayPayment(Strategy):
def pay(self, amount: float) -> str:
return(f"使用支付宝支付了 {amount:.2f} 元。")
class Context:
strategy: Strategy
def set_strategy(self, strategy: Strategy) -> None:
self._strategy = strategy
def pay(self, amount: float) -> str:
return self._strategy.pay(amount)
if __name__ == "__main__":
print("=========== 策略模式 ===========")
context = Context()
context.set_strategy(CashPayment())
print(context.pay(100.0))
context.set_strategy(AlipayPayment())
print(context.pay(200.0))
print("\n========= 策略模式结束 =========")
+44
View File
@@ -0,0 +1,44 @@
"""
实例:
汤宝宝炒西红柿鸡蛋。
"""
from abc import ABC, abstractmethod
class Dish(ABC):
@abstractmethod
def prepare_ingredients(self):
pass
@abstractmethod
def cook(self):
pass
@abstractmethod
def serve(self):
pass
def do_cooking(self):
print("第一步:", end="")
self.prepare_ingredients()
print("第二步:", end="")
self.cook()
print("第三步:", end="")
self.serve()
class TomatoEggDish(Dish):
def prepare_ingredients(self):
print("准备西红柿和鸡蛋。")
def cook(self):
print("炒西红柿和鸡蛋。")
def serve(self):
print("装盘,西红柿鸡蛋炒好了。")
if __name__ == "__main__":
print("========== 模板方法模式 ==========")
dish = TomatoEggDish()
dish.do_cooking()
print("\n======== 模板方法模式结束 ========")