zoukankan      html  css  js  c++  java
  • 【编程思想】【设计模式】【行为模式Behavioral】模板模式Template

    Python转载版

    https://github.com/faif/python-patterns/blob/master/behavioral/template.py

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    """
    http://ginstrom.com/scribbles/2007/10/08/design-patterns-python-style/
    
    An example of the Template pattern in Python
    
    *TL;DR80
    Defines the skeleton of an algorithm, deferring steps to subclasses.
    """
    
    ingredients = "spam eggs apple"
    line = '-' * 10
    
    
    # Skeletons
    def iter_elements(getter, action):
        """Template skeleton that iterates items"""
        for element in getter():
            action(element)
            print(line)
    
    
    def rev_elements(getter, action):
        """Template skeleton 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)]
    
    # Execute them
    for template in templates:
        template()
    
    ### OUTPUT ###
    # spam
    # ----------
    # eggs
    # ----------
    # apple
    # ----------
    # apple
    # ----------
    # eggs
    # ----------
    # spam
    # ----------
    # maps
    # ----------
    # sgge
    # ----------
    # elppa
    # ----------
    # elppa
    # ----------
    # sgge
    # ----------
    # maps
    # ----------
    # ['s', 'p', 'a', 'm']
    # ----------
    # ['e', 'g', 'g', 's']
    # ----------
    # ['a', 'p', 'p', 'l', 'e']
    # ----------
    # ['a', 'p', 'p', 'l', 'e']
    # ----------
    # ['e', 'g', 'g', 's']
    # ----------
    # ['s', 'p', 'a', 'm']
    # ----------
    # ['m', 'a', 'p', 's']
    # ----------
    # ['s', 'g', 'g', 'e']
    # ----------
    # ['e', 'l', 'p', 'p', 'a']
    # ----------
    # ['e', 'l', 'p', 'p', 'a']
    # ----------
    # ['s', 'g', 'g', 'e']
    # ----------
    # ['m', 'a', 'p', 's']
    # ----------
    Python转载版
  • 相关阅读:
    同花顺笔试碰到的一道前端编程题
    闭包会造成内存泄漏吗?
    动态添加和删除节点元素,函数封装
    58同城2018校招前端笔试题总结
    拼多多2018提前批前端笔试总结
    根据字符串字符的个数排序输出
    ES6数组对象新增方法
    【转】浅析BFC及其作用
    《具体数学》学习笔记
    KMP总结
  • 原文地址:https://www.cnblogs.com/demonzk/p/9035675.html
Copyright © 2011-2022 走看看