设计模式: 8. 模版方法模式(Template Method)
来源:互联网 发布:vscode搭建rails 编辑:程序博客网 时间:2024/06/06 16:32
1. 介绍
1.1 针对的问题
不同程序员间随意设计
某个功能需要应对不同情况进行多个实现, 但是不同的程序员设计会导致每个情况程序设计的风格差很多, 还很不规范.
重复设计严重
有些设计在不同场合是可以复用的, 程序员只要重写那些无法复用的部分即可.
1.2 解决方法
Template Method
制作一个模版, 不同情况的设计都按照统一的模版来写. 可以复用的部分就不用写.
只要重写一个个功能模块就可以, 程序执行时按一定顺序调用各个功能模块.
UML图
1.3 优点
规程程序
使得程序编写更加规范, 不易出错.
模块化设计
使得各个部分的设计分割更加清楚, 实现模块化设计.
代码复用
不必重写的部分可以复用.
2. 例子
2.1 需求
需求描述
一个支持在屏幕上绘图的类View。一个view获得焦点之后才能设置特定的图形设备环境(如颜色、字体等),因而只有获得焦点后才能绘图。
这是一个约束(或者规则),如何编码这一约束,使得这一约束能够很容易的被遵守.
2.2 方案
UML图
3. 总结
4. 附录:
4.1 例子代码
python
template_method.py:
# coding: utf-8""" Example of Template Method pattern. @author: Liu Weijie @data: 2016-01-03 需求: 一个支持在屏幕上绘图的类View。一个view获得焦点之后才能设置特定的图形设备环境(如颜色、字体等),因而只有获得焦点后才能绘图。"""class View(object): """ AbstractTemplate """ def set_focus(self): print "this is set_focus()!" def reset_focus(self): print "this is reset_focus()!" def do_display(self): print "this is do_display()!" def display(self): self.set_focus() self.do_display() self.reset_focus()class MyView(View): """ ConcreteTemplate """ def do_display(self): """ Write your display code here. """ print "this is my display code!"if __name__ == "__main__": my_view = MyView() my_view.display()
cpp
main.cpp:
/* Example of Template Method pattern. @author: Liu Weijie @data: 2016-01-03 需求: 一个支持在屏幕上绘图的类View。一个view获得焦点之后才能设置特定的图形设备环境(如颜色、字体等),因而只有获得焦点后才能绘图。*/#include <iostream>using namespace std;// AbstractTemplateclass View{public: virtual void set_focus(void){ cout << "this is set_focus()!" << endl; } virtual void reset_focus(void){ cout << "this is reset_focus()!" << endl; } virtual void do_display(void){ cout << "this do_display()!" << endl; } virtual void display(void){ set_focus(); do_display(); reset_focus(); }};class MyView: public View{protected: virtual void do_display(void){ cout<< "this is my display code!" << endl; }};int main(){ View* my_view = new MyView(); my_view->display(); return 0;}
0 0
- 设计模式 - 模版方法模式 Template Method
- 设计模式: 8. 模版方法模式(Template Method)
- template method(模版方法设计模式)
- 模版方法(Template Method)模式
- 设计模式之template method模版方法模式
- [OOAD]设计模式之模版方法(Template Method)模式
- java设计模式八--Template Method(方法模版模式)
- java设计模式-模版方法模式(Template Method)
- java设计模式八:--Template Method(方法模版模式)
- 设计模式之(Template Method)模版方法模式
- 设计模式 笔记 模版方法模式 Template Method
- JAVA--模版方法模式(Template Method)--设计模式十四
- .NET设计模式-模版方法(Template Method)
- .NET设计模式(16):模版方法(Template Method)
- java设计模式之Template Method(模版方法)
- java设计模式(二):Template Method(模版方法)
- 设计模式之-模版方法(Template Method Design Pattern)
- 小桐学设计模式--模版方法(TEMPLATE METHOD)
- MyEclipse使用总结——在MyEclipse中设置jsp页面为默认utf-8编码
- JAVA多线程实现的三种方式
- 函数名前后加const修饰符的区别
- clob类型的 映射文件、 bean文件
- NYOJ 246 Human Gene Functions dp
- 设计模式: 8. 模版方法模式(Template Method)
- iOS Layout 技术回顾及 Masonry 介绍
- Android Java代码执行adb Shell命令
- 黑马程序员----二十-IO流一
- iOS 字符属性NSAttributedString描述
- json转对象
- ubuntu下配置jdk + tomcat
- 引用项目报错的解决方案~~~
- JAVA去掉空格