白话设计模式之--模板方法
2015-08-11 09:40
176 查看
首先说定义:
定义在一个操作中的一个算法框架,把一些步骤延迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。
就本人评价,这个定义过于狭隘、过于专业化;
小学初中都做过黑板报吧,是不是做之前都要拿一个什么东西来参考,这块放什么,那块放什么;就拿黑板报来说,那就是一种模板方法;再如,小学教的一些作文的格式,请假条的格式,等等;这些都是模板思想的体现。
因此模板可以这么理解,就是制定一方面具体事物的一个抽象过程,抽象过程的抽象程度决定了模板的适用度;抽象度越高,能适用的范围越多,但是需要具体化的东西就越多;抽象程度越低,能适用的范围越窄,但是需要具体化的东西越少。
上面这么说,可能还是有点抽象;下面我说几个例子,以便于大家理解:
例子一:拿生物界的生命轨迹来看。他们无非就经过三个过程:
出生》生存》死亡
当然会不会是一个循环过程这边人类还没有探索出来。
是不是任何生物都有这三个过程呢;
而人和树木,花草的不同之处在于,出生方式,生存方式,死亡方式不同。
人和哺乳动物的相似度就比较高了,可能出生方式和死亡差不多;但是生存方式差一些。
人和人之间就更差不多了,可能只是外观,长相,性格什么的不一样。
例子二:大家都住在房子里,那么房子都有哪些共同之处呢
房子的结构如下:
房顶》墙壁》地面
是不是任何的房子都是这么个结构,不同的只是各自设计实现的样式不同。
例子三:就拿现在流行的网上支付流程来说
以前没有电脑的时候,那些生意人是怎么进行买卖的呢?
看物》一手交货,一手交钱》完成
而电子商务是不是也是这个流程呢?
古代人把钱存到钱庄里,钱庄有一套识别人信息和保管钱财的方式
而现在放到支付宝里,马云是不是应该也有一套识别身份的信息和保管钱财的方式呢;
两者解决的问题可以说是一样的,但是什么不一样?
其实就是用的工具不同,我们根据不同的工具的用法来实现相同的目的;但是要解决问题首先要熟悉工具的用法习性等等。只有这样,才可以真正的解决好问题。
例子四:稍微专业些的,就拿一个应用启动来说
启动》使用》退出
我敢说好多人没思考过为什么以前写的C代码,直接就是一个黑框框,运行得到结果就完了,而现在你的应用却一直在运行,为什么弹出一个界面会一直停留在哪里?那是因为编译器已经将启动和退出这两个过程实现了,而我们最主要关心的是使用这个环节需要处理的业务。但是你不能不思考,因为知道的越多,越有利于你以后的设计,所谓站在巨人的肩膀上。
首先说定义:
定义在一个操作中的一个算法框架,把一些步骤延迟到子类去实现。模板方法模式让子类不需要改变算法结构而重新定义特定的算法步骤。
就本人评价,这个定义过于狭隘、过于专业化;
小学初中都做过黑板报吧,是不是做之前都要拿一个什么东西来参考,这块放什么,那块放什么;就拿黑板报来说,那就是一种模板方法;再如,小学教的一些作文的格式,请假条的格式,等等;这些都是模板思想的体现。
因此模板可以这么理解,就是制定一方面具体事物的一个抽象过程,抽象过程的抽象程度决定了模板的适用度;抽象度越高,能适用的范围越多,但是需要具体化的东西就越多;抽象程度越低,能适用的范围越窄,但是需要具体化的东西越少。
上面这么说,可能还是有点抽象;下面我说几个例子,以便于大家理解:
例子一:拿生物界的生命轨迹来看。他们无非就经过三个过程:
出生》生存》死亡
当然会不会是一个循环过程这边人类还没有探索出来。
是不是任何生物都有这三个过程呢;
而人和树木,花草的不同之处在于,出生方式,生存方式,死亡方式不同。
人和哺乳动物的相似度就比较高了,可能出生方式和死亡差不多;但是生存方式差一些。
人和人之间就更差不多了,可能只是外观,长相,性格什么的不一样。
例子二:大家都住在房子里,那么房子都有哪些共同之处呢
房子的结构如下:
房顶》墙壁》地面
是不是任何的房子都是这么个结构,不同的只是各自设计实现的样式不同。
例子三:就拿现在流行的网上支付流程来说
以前没有电脑的时候,那些生意人是怎么进行买卖的呢?
看物》一手交货,一手交钱》完成
而电子商务是不是也是这个流程呢?
古代人把钱存到钱庄里,钱庄有一套识别人信息和保管钱财的方式
而现在放到支付宝里,马云是不是应该也有一套识别身份的信息和保管钱财的方式呢;
两者解决的问题可以说是一样的,但是什么不一样?
其实就是用的工具不同,我们根据不同的工具的用法来实现相同的目的;但是要解决问题首先要熟悉工具的用法习性等等。只有这样,才可以真正的解决好问题。
例子四:稍微专业些的,就拿一个应用启动来说
启动》使用》退出
我敢说好多人没思考过为什么以前写的C代码,直接就是一个黑框框,运行得到结果就完了,而现在你的应用却一直在运行,为什么弹出一个界面会一直停留在哪里?那是因为编译器已经将启动和退出这两个过程实现了,而我们最主要关心的是使用这个环节需要处理的业务。但是你不能不思考,因为知道的越多,越有利于你以后的设计,所谓站在巨人的肩膀上。
相关文章推荐
- 程序员未来发展三大方向
- BBS死了?江湖永远都在,只是换个山头
- 线程池C++
- 养生习惯
- 17-集合框架-20-常用对象API(集合框架练习)
- 前言(必读)
- 关于程序员工作 交接的一些注意事项
- Java 多线程之内存一致性错误
- C++概念整理
- public, protected, private, internal, protected internal简析
- 安装 Graphviz
- Win 10只用Edge浏览器?是否应该卸载掉IE
- 为什么程序员的业余项目大多都死了?
- C++11 STL之emplace() 和 emplace_back()
- adb端口被占用/adb无法使用的一种解决方法
- Light OJ 1319 Monkey Tradition(中国剩余定理)
- 17-集合框架-19-常用对象API(集合框架-HashSet存储自定义对象)
- hdu 1358
- 微信SDK开发学习第二课
- linux软件安装