Last active
May 23, 2016 16:56
-
-
Save atsuya046/8464761 to your computer and use it in GitHub Desktop.
GoF design pattern with Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""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