Skip to content

Instantly share code, notes, and snippets.

@atsuya046
Last active May 23, 2016 16:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save atsuya046/8464761 to your computer and use it in GitHub Desktop.
Save atsuya046/8464761 to your computer and use it in GitHub Desktop.
GoF design pattern with Python
"""http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
An example of the Template pattern in Python"""
ingredients = "spam eggs apple"
line = '-' * 10
# Skeletons
def iter_elements(getter, action):
"""Template skeletons that iterates items"""
for element in getter():
action(element)
print(line)
def rev_elements(getter, action):
"""Template skeletons that iterates items in reverse order"""
for element in getter()[::-1]:
action(element)
print(line)
# Getters
def get_list():
return ingredients.split()
def get_lists():
return [list(x) for x in ingredients.split()]
# Actions
def print_item(item):
print(item)
def reverse_item(item):
print(item[::-1])
# Makes templates
def make_template(skeleton, getter, action):
"""Instantiate a template method with getter and action"""
def template():
skeleton(getter, action)
return template
# Create our template functions
templates = [make_template(s, g, a)
for g in (get_list, get_lists)
for a in (print_item, reverse_item)
for s in (iter_elements, rev_elements)]
for template in templates:
template()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment