1
+ import abc
2
+
3
+
4
+ class Cheese (abc .ABC ):
5
+ def __str__ (self ):
6
+ raise NotImplementedError
7
+
8
+
9
+ class MozzarellaCheese (Cheese ):
10
+ def __str__ (self ):
11
+ return "Shredded Mozzarella"
12
+
13
+
14
+ class ReggianoCheese (Cheese ):
15
+ def __str__ (self ):
16
+ return "Reggiano Cheese"
17
+
18
+
19
+ class Dough (abc .ABC ):
20
+ def __str__ (self ):
21
+ raise NotImplementedError
22
+
23
+
24
+ class ThickCrustDough (Dough ):
25
+ def __str__ (self ):
26
+ return "ThickCrust style extra thick crust dough"
27
+
28
+
29
+ class ThinCrustDough (Dough ):
30
+ def __str__ (self ):
31
+ return "Thin Crust Dough"
32
+
33
+
34
+ class Clams (abc .ABC ):
35
+ def __str__ (self ):
36
+ raise NotImplementedError
37
+
38
+
39
+ class FreshClams (Clams ):
40
+ def __str__self ():
41
+ return "Fresh Clams from Long Island Sound"
42
+
43
+
44
+ class FrozenClams (Clams ):
45
+ def __str__ (self ):
46
+ return "Frozen Clams from Chesapeake Bay"
47
+
48
+
49
+ class Sauce (abc .ABC ):
50
+ def __str__ (self ):
51
+ raise NotImplementedError
52
+
53
+
54
+ class MarinaraSauce (Sauce ):
55
+ def __str__ (self ):
56
+ return "Marinara Sauce"
57
+
58
+
59
+ class PlumTomatoSauce (Sauce ):
60
+ def __str__ (self ):
61
+ return "Tomato sauce with plum tomatoes"
62
+
63
+
64
+ class Veggies (abc .ABC ):
65
+ def __str__ (self ):
66
+ raise NotImplementedError
67
+
68
+
69
+ class Spinach (Veggies ):
70
+ def __str__ (self ):
71
+ return "Spinach"
72
+
73
+
74
+ class BlackOlives (Veggies ):
75
+ def __str__ (self ):
76
+ return "Black Olives"
77
+
78
+
79
+ class Eggplant (Veggies ):
80
+ def __str__ (self ):
81
+ return "Eggplant"
82
+
83
+
84
+ class Garlic (Veggies ):
85
+ def __str__ (self ):
86
+ return "Garlic"
87
+
88
+
89
+ class Mushroom (Veggies ):
90
+ def __str__ (self ):
91
+ return "Mushrooms"
92
+
93
+
94
+ class Onion (Veggies ):
95
+ def __str__ (self ):
96
+ return "Onion"
97
+
98
+
99
+ class RedPepper (Veggies ):
100
+ def __str__ (self ):
101
+ return "Red Pepper"
102
+
103
+
104
+ class Pepperoni (abc .ABC ):
105
+ def __str__ (self ) -> str :
106
+ raise NotImplementedError
107
+
108
+
109
+ class SlicedPepperoni (Pepperoni ):
110
+ def __str__ (self ) -> str :
111
+ return "Sliced Pepperoni"
112
+
113
+
114
+ class PizzaIngredientFactory (abc .ABC ):
115
+ def create_dough ():
116
+ raise NotImplementedError
117
+ def create_sauce ():
118
+ raise NotImplementedError
119
+ def create_cheese ():
120
+ raise NotImplementedError
121
+ def create_veggies ():
122
+ raise NotImplementedError
123
+ def create_pepperoni ():
124
+ raise NotImplementedError
125
+ def create_clam ():
126
+ raise NotImplementedError
127
+
128
+
129
+ class ChicagoPizzaIngredientFactory (PizzaIngredientFactory ):
130
+ def create_dough ():
131
+ return ThickCrustDough ()
132
+ def create_sauce ():
133
+ return PlumTomatoSauce ()
134
+ def create_cheese ():
135
+ return MozzarellaCheese ()
136
+ def create_veggies ():
137
+ return [BlackOlives (), Spinach (), Eggplant ()]
138
+ def create_pepperoni ():
139
+ return SlicedPepperoni ()
140
+ def create_clam ():
141
+ return FrozenClams ()
142
+
143
+
144
+ class NYPizzaIngredientFactory (PizzaIngredientFactory ):
145
+ def create_dough ():
146
+ return ThinCrustDough ()
147
+ def create_sauce ():
148
+ return MarinaraSauce ()
149
+ def create_cheese ():
150
+ return ReggianoCheese ()
151
+ def create_veggies ():
152
+ return [Garlic (), Onion (), Mushroom (), RedPepper ()]
153
+ def create_pepperoni ():
154
+ return SlicedPepperoni ()
155
+ def create_clam ():
156
+ return FreshClams ()
157
+
158
+
0 commit comments