实现代理模式示例,添加火车站和代售点类,增强代码可读性
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
"""
|
||||
实例:
|
||||
汤宝宝买火车票,可以去火车站买,也可以去代售点买,但是汤宝宝选择全都要。然而,火车站总共只剩两张票,这可苦了小明了。
|
||||
"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
|
||||
class Seller(ABC):
|
||||
@abstractmethod
|
||||
def sell(self, name: str) -> bool:
|
||||
pass
|
||||
|
||||
|
||||
class TrainStation(Seller):
|
||||
stock: int
|
||||
|
||||
def __init__(self, stock: int) -> None:
|
||||
print(f"火车站库存{stock}张票")
|
||||
self.stock = stock
|
||||
|
||||
def sell(self, name: str) -> bool:
|
||||
print(f"{name}去火车站买票。")
|
||||
if self.stock > 0:
|
||||
self.stock -= 1
|
||||
print(f"{name}在火车站买到一张火车票。")
|
||||
return True
|
||||
else:
|
||||
print(f"火车站没票了,{name}没买到票。")
|
||||
return False
|
||||
|
||||
class TicketAgency(Seller):
|
||||
name: str
|
||||
station: TrainStation
|
||||
|
||||
def __init__(self, name: str, station: TrainStation) -> None:
|
||||
self.name = name
|
||||
self.station = station
|
||||
|
||||
def sell(self, name: str) -> bool:
|
||||
print(f"{name}去{self.name}买票。")
|
||||
result = self.station.sell(self.name)
|
||||
if result:
|
||||
print(f"{name}在{self.name}买到一张火车票。")
|
||||
else:
|
||||
print(f"{name}在{self.name}没买到票。")
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("============= 代理模式 =============")
|
||||
station = TrainStation(stock=2)
|
||||
agency = TicketAgency(name="代售点A", station=station)
|
||||
station.sell("汤宝宝")
|
||||
agency.sell("汤宝宝")
|
||||
print("")
|
||||
agency.sell("小明")
|
||||
station.sell("小明")
|
||||
|
||||
print("\n=========== 代理模式结束 ===========")
|
||||
Reference in New Issue
Block a user