Skip to content

Commit

Permalink
Merge branch 'luoxing91-master'
Browse files Browse the repository at this point in the history
  • Loading branch information
faif committed Sep 6, 2014
2 parents dc97a52 + fee0702 commit 8225e25
Show file tree
Hide file tree
Showing 8 changed files with 56 additions and 128 deletions.
17 changes: 3 additions & 14 deletions abstract_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,17 @@

import random


class PetShop:

"""A pet shop"""

def __init__(self, animal_factory=None):
"""pet_factory is our abstract factory.
We can set it at will."""
"""pet_factory is our abstract factory. We can set it at will."""

self.pet_factory = animal_factory

def show_pet(self):
"""Creates and shows a pet using the
abstract factory"""
"""Creates and shows a pet using the abstract factory"""

pet = self.pet_factory.get_pet()
print("We have a lovely {}".format(pet))
Expand Down Expand Up @@ -55,19 +52,12 @@ class DogFactory:
def get_pet(self):
return Dog()

def get_food(self):
return "dog food"


class CatFactory:

def get_pet(self):
return Cat()

def get_food(self):
return "cat food"


# Create the proper family
def get_factory():
"""Let's be dynamic!"""
Expand All @@ -76,9 +66,8 @@ def get_factory():

# Show pets with various factories
if __name__ == "__main__":
shop = PetShop()
for i in range(3):
shop.pet_factory = get_factory()
shop = PetShop(get_factory())
shop.show_pet()
print("=" * 20)

Expand Down
11 changes: 0 additions & 11 deletions adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,39 +5,28 @@

import os


class Dog(object):

def __init__(self):
self.name = "Dog"

def bark(self):
return "woof!"


class Cat(object):

def __init__(self):
self.name = "Cat"

def meow(self):
return "meow!"


class Human(object):

def __init__(self):
self.name = "Human"

def speak(self):
return "'hello'"


class Car(object):

def __init__(self):
self.name = "Car"

def make_noise(self, octane_level):
return "vroom{0}".format("!" * octane_level)

Expand Down
65 changes: 23 additions & 42 deletions chain.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,69 +3,50 @@

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


class Handler:

def __init__(self):
self._successor = None

def successor(self, successor):
self._successor = successor

def handle(self, request):
def __init__(self,successor):
self._successor = successor;
def handle(self,request):
i = self._handle(request)
if not i:
self._successor.handle(request)
def _handle(self, request):
raise NotImplementedError('Must provide implementation in subclass.')


class ConcreteHandler1(Handler):

def handle(self, request):
def _handle(self, request):
if 0 < request <= 10:
print('request {} handled in handler 1'.format(request))
elif self._successor:
self._successor.handle(request)


return True

class ConcreteHandler2(Handler):

def handle(self, request):
def _handle(self, request):
if 10 < request <= 20:
print('request {} handled in handler 2'.format(request))
elif self._successor:
self._successor.handle(request)


return True

class ConcreteHandler3(Handler):

def handle(self, request):
def _handle(self, request):
if 20 < request <= 30:
print('request {} handled in handler 3'.format(request))
elif self._successor:
self._successor.handle(request)


return True
class DefaultHandler(Handler):

def handle(self, request):
print('end of chain, no handler for {}'.format(request))

def _handle(self, request):
print('end of chain, no handler for {}'.format(request))
return True


class Client:

def __init__(self):
h1 = ConcreteHandler1()
h2 = ConcreteHandler2()
h3 = ConcreteHandler3()
h4 = DefaultHandler()

h1.successor(h2)
h2.successor(h3)
h3.successor(h4)

self.handlers = (h1, h2, h3, h4,)

self.handler = ConcreteHandler1(ConcreteHandler3(ConcreteHandler2(DefaultHandler(None))))
def delegate(self, requests):
for request in requests:
self.handlers[0].handle(request)
self.handler.handle(request)


if __name__ == "__main__":
Expand Down
3 changes: 0 additions & 3 deletions command.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ def __init__(self, src, dest):
self.dest = dest

def execute(self):
self()

def __call__(self):
print('renaming {} to {}'.format(self.src, self.dest))
os.rename(self.src, self.dest)

Expand Down
35 changes: 22 additions & 13 deletions composite.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
A class which defines a composite object which can store
hieararchical dictionaries with names.
This class is same as a hiearchical dictionary, but it
provides methods to add/access/modify children by name,
like a Composite.
This class is same as a hiearchical dictionary, but it provides methods
to add/access/modify children by name, like a Composite.
Created Anand B Pillai <[email protected]>
Created Anand B Pillai <[email protected]>
"""
__author__ = "Anand B Pillai"
Expand All @@ -18,8 +17,10 @@


def normalize(val):
""" Normalize a string so that it can be used as an attribute
to a Python object """
"""Normalize a string so that it can be used as an attribute to a Python
object
"""

if val.find('-') != -1:
val = val.replace('-', '_')
Expand All @@ -38,8 +39,7 @@ def denormalize(val):

class SpecialDict(dict):

""" A dictionary type which allows direct attribute
access to its keys """
"""A dictionary type which allows direct attribute access to its keys """

def __getattr__(self, name):

Expand Down Expand Up @@ -127,11 +127,13 @@ def isLeaf(self):
return not self._children

def getName(self):

""" Return the name of this ConfigInfo object """

return self._name

def getIndex(self, child):

""" Return the index of the child ConfigInfo object 'child' """

if child in self._children:
Expand All @@ -145,29 +147,31 @@ def getDict(self):
return self[self._name]

def getProperty(self, child, key):
""" Return the value for the property for child
'child' with key 'key' """

"""Return the value for the property for child 'child' with key 'key' """

# First get the child's dictionary
childDict = self.getInfoDict(child)
if childDict:
return childDict.get(key, None)

def setProperty(self, child, key, value):
""" Set the value for the property 'key' for
the child 'child' to 'value' """
def setProperty(self, child, key, value):
"""Set the value for the property 'key' for the child 'child' to 'value' """

# First get the child's dictionary
childDict = self.getInfoDict(child)
if childDict:
childDict[key] = value

def getChildren(self):

""" Return the list of immediate children of this object """

return self._children

def getAllChildren(self):

""" Return the list of all children of this object """

l = []
Expand All @@ -178,13 +182,15 @@ def getAllChildren(self):
return l

def getChild(self, name):

""" Return the immediate child object with the given name """

for child in self._children:
if child.getName() == name:
return child

def findChild(self, name):

""" Return the child with the given name from the tree """

# Note - this returns the first child of the given name
Expand All @@ -196,6 +202,7 @@ def findChild(self, name):
return child

def findChildren(self, name):

""" Return a list of children with the given name from the tree """

# Note: this returns a list of all the children of a given
Expand All @@ -210,6 +217,7 @@ def findChildren(self, name):
return children

def getPropertyDict(self):

""" Return the property dictionary """

d = self.getChild('__properties')
Expand All @@ -219,6 +227,7 @@ def getPropertyDict(self):
return {}

def getParent(self):

""" Return the person who created me """

return self._father
Expand Down
1 change: 0 additions & 1 deletion foo.txt

This file was deleted.

37 changes: 0 additions & 37 deletions iterator.py

This file was deleted.

Loading

0 comments on commit 8225e25

Please sign in to comment.