博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
极速理解设计模式系列:20.模板方法模式(Template Method Pattern)
阅读量:5734 次
发布时间:2019-06-18

本文共 1573 字,大约阅读时间需要 5 分钟。

四个角色:抽象类(AbstractClass)、具体子类(ConcreateClass)、客户端(Client) 

        抽象类(AbstractClass):定义抽象原始操作让其子类可重定义,并且添加一个模板方法定义算法骨架模板,调用原始操作

        具体子类(ConcreateClass):实现原始操作方法。

        客户端(Client) :实例化具体子类,然后调用模板方法执行子类的原始操作。

实现思路:在客户端实例化具体子类,通过子类实例调用模板方法来按照一定算法执行子类定义的原始操作。

类图:

应用场景:一个人的生活。

分析:每个人的生活习惯不一样,但是基本规律是不会改变的,都是起床、吃饭、睡觉,在本实例中生活方法是一个模板,然后每个人作为子类可以有不同的起床、吃饭、睡觉时间和方式。

        下面我们在控制台程序去演示一下如何使用Template Method Pattern:

        一、抽象类(AbstractClass):

//抽象类(AbstractClass)     abstract class AbsPeople {
// 起床 abstract public void GetUp(); // 吃饭 abstract public void Eat(); // 睡觉 abstract public void Sleep(); // 生活模板方法 public void Live() {
GetUp(); Eat(); Sleep(); } }

        二、具体子类(ConcreateClass):

//具体子类(ConcreateClass)     class ConPeopleJack:AbsPeople {
public override void GetUp() {
Console.WriteLine("Jack 9点起床了"); } public override void Eat() {
Console.WriteLine("Jack 今天吃中式快餐餐。"); } public override void Sleep() {
Console.WriteLine("Jack 23点晚晚的回家睡觉。"); } }
//具体子类(ConcreateClass)     class ConPeopleMike : AbsPeople {
public override void GetUp() {
Console.WriteLine("Mike 今天11点起床了。"); } public override void Eat() {
Console.WriteLine("Mike 今天吃西餐。"); } public override void Sleep() {
Console.WriteLine("Mike 19点早早的睡觉。"); } }

        三、 客户端(Client):

//客户端(Client)     class Program {
static void Main(string[] args) {
AbsPeople jack = new ConPeopleJack(); jack.Live(); AbsPeople mike = new ConPeopleMike(); mike.Live(); Console.ReadLine(); } }

       如需源码请点击   下载。

本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/11/29/2256139.html,如需转载请自行联系原作者

你可能感兴趣的文章
BZOJ - 3578: GTY的人类基因组计划2
查看>>
理解WebKit和Chromium(电子书)
查看>>
爱——无题
查看>>
分布式服务框架原来与实践 读书笔记一
查看>>
Aho-Corasick automation-KMP
查看>>
【http】post和get请求的区别
查看>>
/etc/profile
查看>>
摘记总结(1)
查看>>
TFS强制撤销某个工作区的文件签出记录
查看>>
编写who命令
查看>>
2.1 sikuli 中编程运行
查看>>
愚公移山第一章伪代码
查看>>
常见的位运算技巧总结(膜wys)
查看>>
python魔法函数(二)之__getitem__、__len__、__iter__
查看>>
EL表达式无法显示Model中的数据
查看>>
Linux应用小技巧
查看>>
考题纠错2
查看>>
ps6-工具的基础使用
查看>>
关于CefSharp.WinForms的学习
查看>>
灵活运用 SQL SERVER FOR XML PATH
查看>>