-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathfactory_method.py
More file actions
68 lines (50 loc) · 1.98 KB
/
factory_method.py
File metadata and controls
68 lines (50 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class PostOffice:
def deliver(self, parcel):
print(f"Parcel {parcel} was delivered by PostOffice")
class Courier:
def deliver(self, parcel):
print(f"Parcel {parcel} was delivered by Courier")
class Pigeon:
def deliver(self, parcel):
print(f"Parcel {parcel} was delivered by Pigeon")
class OrderLifecycle:
def process_order(self, order_id):
parcel = self.prepare_parcel(order_id)
delivery_service = self.delivery_service()
delivery_service.deliver(parcel)
def prepare_parcel(self, order_id):
parcel = f"[sampro:{order_id}]"
print(f"Parcel {parcel} was prepared")
return parcel
def delivery_service(self):
return PostOffice()
class PigeonOrderLifecycle(OrderLifecycle):
def delivery_service(self):
return Pigeon()
class CourierOrderLifecycle(OrderLifecycle):
def delivery_service(self):
return Courier()
class OrderLifecycle2:
def __init__(self, delivery_service_factory=PostOffice):
self.delivery_service_factory = delivery_service_factory
def process_order(self, order_id):
parcel = self.prepare_parcel(order_id)
delivery_service = self.delivery_service_factory()
delivery_service.deliver(parcel)
def prepare_parcel(self, order_id):
parcel = f"[sampro:{order_id}]"
print(f"Parcel {parcel} was prepared")
return parcel
if __name__ == "__main__":
courier_order = CourierOrderLifecycle()
pigeon_order = PigeonOrderLifecycle()
post_office_order = OrderLifecycle()
post_office_order.process_order("order_1")
courier_order.process_order("order_2")
pigeon_order.process_order("order_3")
courier_order = OrderLifecycle2(delivery_service_factory=Courier)
pigeon_order = OrderLifecycle2(delivery_service_factory=Pigeon)
post_office_order = OrderLifecycle2()
post_office_order.process_order("order_1")
courier_order.process_order("order_2")
pigeon_order.process_order("order_3")