设计模式十七:模板模式

什么是模板模式

编写优秀代码的一个要素是避免冗余;
模式关注的是消除代码冗余;
无需改变算法结构就能重新定义一个算法的某些部分。

使用场景

发现结构相近的算法中有重复代码,则可以把算法的不变部分留在一个模板方法中,把易变的部分移动到动作/钩子方法中。

典型案例

工人的日常
所有工人都遵从或多或少相同的例行流程,但例行流程的某些特定部分区别又很大。

实例代码

from cowpy import cow # 艺术字符def dots_style(msg):msg = msg.capitalize()msg = '.'*10 + msg +'.'*10return msgdef admire_style(msg):msg = msg.upper()return '!'.join(msg)def cow_style(msg):msg = cow.milk_random_cow(msg)return msgdef generate_banner(msg,style=dots_style): # 模板函数 print('-- start of banner --')print(style(msg))print('-- end of banner --\n\n')def main():msg = 'happy coding'[generate_banner(msg,style) for style in (dots_style,admire_style,cow_style)]if __name__ == "__main__":main()

Python设计模式:模板模式相关推荐

  1. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  2. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  3. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  4. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

  5. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  6. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  7. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  8. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  9. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  10. 12. 星际争霸之php设计模式--模板模式

    题记 ============================================================================== 本php设计模式专辑来源于博客(jy ...

最新文章

  1. python用什么开发平台_一般来说,python平台开发有什么作用?
  2. jvm高并发_在JVM上对高并发HTTP服务器进行基准测试
  3. gwt格式_GWT –利弊
  4. 前端学习(1802):前端调试之事件伪类
  5. iOS App图标和启动画面尺寸
  6. 垃圾回收算法与实现系列-锁在Java虚拟机中的实现和优化
  7. 机械加工工艺师手册_机械加工中车、刨、铣、镗、磨、钻、线切割等设备,你知道哪些?...
  8. eclipse ARM/AARCH64版本下载
  9. android自动点击相应位置脚本,轻易连使用说明-自动连点器-安卓自动点击脚本 | MOS86...
  10. 智能制造与大数据平台
  11. 华北计算机系统工程研究所 韩庆,华北电力大学学报(自然科学版)
  12. 三做一年级算术题-吐槽挖雷
  13. mac使用的pd虚拟机window黑屏 ---已解决
  14. windows中安装绿色版的mysql
  15. Linux 驱动程序介绍
  16. 大数据在医疗行业中的5种应用
  17. 计算机开机黑屏90,终于晓得笔记本电脑开机黑屏检修步骤
  18. 生活指南:IT人士健康生活应多吃的几种食物
  19. Camtasia2020视频录制软件的安装及pj顶级屏幕录像视频编辑软件
  20. mediawiki修改用mysql数据库_修改MediaWiki的动态页面列表DPL设置降低MySQL负载

热门文章

  1. 计算机机房吊顶保温,机房吊顶高度
  2. 【C#】C#中的ref、out关键字的应用与区别
  3. windwos 下载安装OpenSSH
  4. 叹:::::再强大的影视神作也会有人诋毁
  5. 轻钢别墅的隔音效果竟如此惊人!
  6. 【C语言】详解:折半查找(二分查找算法)
  7. 阿里收购饿了么对于后者来说也是一个不错的结局
  8. 开源赋能 普惠未来|中软国际寄语 2023 开放原子全球开源峰会
  9. 运动耳机哪种好、口碑最好的运动蓝牙耳机排行榜
  10. 如何精心设计CDN架构(一)