关闭

Python设计模式(二十三)【模板方法模式】

标签: python设计模式迭代
743人阅读 评论(0) 收藏 举报
分类:

过去属于死神,现在属于自己。

"""
模板方法模式
"""
ingredients = "垃圾邮件 鸡蛋 苹果"
line = '-' * 10

# 骨架
def iter_elements(getter, action):
    """模板的骨架-迭代项目"""
    for element in getter():
        action(element)
        print(line)


def rev_elements(getter, action):
    """模板的骨架-反序迭代项目"""
    for element in getter()[::-1]:
        action(element)
        print(line)


def get_list():
    return ingredients.split()


def get_lists():
    return [list(x) for x in ingredients.split()]


def print_item(item):
    print(item)


def reverse_item(item):
    print(item[::-1])


#创建模板
def make_template(skeleton, getter, action):
    """实例化一个模板方法,有 getter 和 action"""
    def template():
        skeleton(getter, action)
    return template

# 创建我们的模板函数
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()

结果:

垃圾邮件
----------
鸡蛋
----------
苹果
----------
苹果
----------
鸡蛋
----------
垃圾邮件
----------
件邮圾垃
----------
蛋鸡
----------
果苹
----------
果苹
----------
蛋鸡
----------
件邮圾垃
----------
['垃', '圾', '邮', '件']
----------
['鸡', '蛋']
----------
['苹', '果']
----------
['苹', '果']
----------
['鸡', '蛋']
----------
['垃', '圾', '邮', '件']
----------
['件', '邮', '圾', '垃']
----------
['蛋', '鸡']
----------
['果', '苹']
----------
['果', '苹']
----------
['蛋', '鸡']
----------
['件', '邮', '圾', '垃']
----------
0
0
查看评论

二十三中设计模式

一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观...
  • zhang89xiao
  • zhang89xiao
  • 2016-05-04 14:15
  • 728

大话设计模式—模板方法模式

在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。大话设计模式中程杰老师给出的定义是:模板方法模式:定义一个操作中的算法的骨架,而将一些步...
  • lmb55
  • lmb55
  • 2016-03-26 13:47
  • 1177

【设计模式】——原型模式VS模板方法模式

不知道何种原因总是把原型模式和模板方法模式搞混,着实很苦恼啊!不知道大家是否有同样的困扰,有的话治疗,没有的话预防啊。故该文章进行详细对比学习! 原型模式     所谓的原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。     解释:...
  • jiadajing267
  • jiadajing267
  • 2015-11-02 19:47
  • 1022

设计模式初探-模板方法模式

模板方法模式(TEMPLATE METHOD),用于定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,属于类行为型模式。模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。...
  • qbg19881206
  • qbg19881206
  • 2014-02-16 15:40
  • 1474

大话设计模式总结3---二十三种模式

创建型模式(CreationalPatters):一共有五种,常用的有三种。 工厂方法(FactoryMethod):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法是一个列的实例化延迟到其子类。工厂方法用一个virtual method完成创建过程。 抽象工厂(Abs...
  • xjc1278003262
  • xjc1278003262
  • 2013-04-06 09:32
  • 2641

【java设计模式】之 模板方法(Template Method)模式

1. 模板方法的一个实例         这一节主要来学习一下设计模式中的模板方法模式。我们先来看一个例子:假如现在老板让你做一个汽车的模型,要求只要完成基本功能即可,不考虑扩展性,那你会怎么做呢?我们首先会根据经验设...
  • eson_15
  • eson_15
  • 2016-05-06 08:57
  • 4088

C#设计模式——模板方法模式

模板方法模式: 应用广泛的模式 一、意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可重定义该算法的某些特定步骤。 二、作用: 代码复用平台,帮助子类摆脱重复的不变行为的纠缠。基于继承的代码复用性 三、使用技巧: 先抽象...
  • hongwei15732623364
  • hongwei15732623364
  • 2016-02-13 17:01
  • 685

Java设计模式之模板方法模式(Template Method)

本文属于23种设计模式系列,介绍的是模板方法模式。
  • jason0539
  • jason0539
  • 2015-04-15 08:37
  • 28551

博客专栏:二十三种设计模式之开篇

这是博主的第一篇博客,博主正在学习二十三种设计模式,用博客来记录下学习心得是判断你是否掌握一门知识最直观的方法了。 直接进入正题 设计模式的学习过程参考了以下博客:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html...
  • qq_30901199
  • qq_30901199
  • 2016-04-03 10:10
  • 398

[设计模式]二十三种设计模式

分类: DesignPattern(8)  目录(?)[+] 原文地址:http://blog.csdn.net/zhangerqing 一、设计模式的分类 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象...
  • qq3965470
  • qq3965470
  • 2016-08-09 23:54
  • 5022
    个人资料
    • 访问:1313607次
    • 积分:18803
    • 等级:
    • 排名:第583名
    • 原创:312篇
    • 转载:940篇
    • 译文:123篇
    • 评论:300条
    博客专栏
    文章分类
    打赏
    如果你觉得我的文章对您有用,请随意打赏。 微信 支付宝