Skip to content

Commit e59aabd

Browse files
committed
change abstract_factory
1 parent 3395367 commit e59aabd

File tree

3 files changed

+26
-67
lines changed

3 files changed

+26
-67
lines changed

‎abstract_factory.py‎

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,17 @@
77

88
importrandom
99

10-
1110
classPetShop:
1211

1312
"""A pet shop"""
1413

1514
def__init__(self, animal_factory=None):
16-
"""pet_factory is our abstract factory.
17-
We can set it at will."""
15+
"""pet_factory is our abstract factory. We can set it at will."""
1816

1917
self.pet_factory=animal_factory
2018

2119
defshow_pet(self):
22-
"""Creates and shows a pet using the
23-
abstract factory"""
20+
"""Creates and shows a pet using the abstract factory"""
2421

2522
pet=self.pet_factory.get_pet()
2623
print("We have a lovely{}".format(pet))
@@ -55,19 +52,12 @@ class DogFactory:
5552
defget_pet(self):
5653
returnDog()
5754

58-
defget_food(self):
59-
return"dog food"
60-
6155

6256
classCatFactory:
6357

6458
defget_pet(self):
6559
returnCat()
6660

67-
defget_food(self):
68-
return"cat food"
69-
70-
7161
# Create the proper family
7262
defget_factory():
7363
"""Let's be dynamic!"""
@@ -76,9 +66,8 @@ def get_factory():
7666

7767
# Show pets with various factories
7868
if__name__=="__main__":
79-
shop=PetShop()
8069
foriinrange(3):
81-
shop.pet_factory=get_factory()
70+
shop=PetShop(get_factory())
8271
shop.show_pet()
8372
print("="*20)
8473

‎adapter.py‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,28 @@
55

66
importos
77

8-
98
classDog(object):
10-
119
def__init__(self):
1210
self.name="Dog"
13-
1411
defbark(self):
1512
return"woof!"
1613

17-
1814
classCat(object):
19-
2015
def__init__(self):
2116
self.name="Cat"
22-
2317
defmeow(self):
2418
return"meow!"
2519

26-
2720
classHuman(object):
28-
2921
def__init__(self):
3022
self.name="Human"
31-
3223
defspeak(self):
3324
return"'hello'"
3425

3526

3627
classCar(object):
37-
3828
def__init__(self):
3929
self.name="Car"
40-
4130
defmake_noise(self, octane_level):
4231
return"vroom{0}".format("!"*octane_level)
4332

‎chain.py‎

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,69 +3,50 @@
33

44
"""http://www.testingperspective.com/wiki/doku.php/collaboration/chetan/designpatternsinpython/chain-of-responsibilitypattern"""
55

6-
76
classHandler:
8-
9-
def__init__(self):
10-
self._successor=None
11-
12-
defsuccessor(self, successor):
13-
self._successor=successor
14-
15-
defhandle(self, request):
7+
def__init__(self,successor):
8+
self._successor=successor;
9+
defhandle(self,request):
10+
i=self._handle(request)
11+
ifnoti:
12+
self._successor.handle(request)
13+
def_handle(self, request):
1614
raiseNotImplementedError('Must provide implementation in subclass.')
1715

1816

1917
classConcreteHandler1(Handler):
2018

21-
defhandle(self, request):
19+
def_handle(self, request):
2220
if0<request<=10:
2321
print('request{} handled in handler 1'.format(request))
24-
elifself._successor:
25-
self._successor.handle(request)
26-
27-
22+
returnTrue
23+
2824
classConcreteHandler2(Handler):
29-
30-
defhandle(self, request):
25+
26+
def_handle(self, request):
3127
if10<request<=20:
3228
print('request{} handled in handler 2'.format(request))
33-
elifself._successor:
34-
self._successor.handle(request)
35-
36-
29+
returnTrue
30+
3731
classConcreteHandler3(Handler):
38-
39-
defhandle(self, request):
32+
33+
def_handle(self, request):
4034
if20<request<=30:
4135
print('request{} handled in handler 3'.format(request))
42-
elifself._successor:
43-
self._successor.handle(request)
44-
45-
36+
returnTrue
4637
classDefaultHandler(Handler):
47-
48-
defhandle(self, request):
49-
print('end of chain, no handler for{}'.format(request))
38+
39+
def_handle(self, request):
40+
print('end of chain, no handler for{}'.format(request))
41+
returnTrue
5042

5143

5244
classClient:
53-
5445
def__init__(self):
55-
h1=ConcreteHandler1()
56-
h2=ConcreteHandler2()
57-
h3=ConcreteHandler3()
58-
h4=DefaultHandler()
59-
60-
h1.successor(h2)
61-
h2.successor(h3)
62-
h3.successor(h4)
63-
64-
self.handlers= (h1, h2, h3, h4,)
65-
46+
self.handler=ConcreteHandler1(ConcreteHandler3(ConcreteHandler2(DefaultHandler(None))))
6647
defdelegate(self, requests):
6748
forrequestinrequests:
68-
self.handlers[0].handle(request)
49+
self.handler.handle(request)
6950

7051

7152
if__name__=="__main__":

0 commit comments

Comments
(0)