23种设计模式之(十三)模板模式(TemplateMethod)
本文主要介绍23种设计模式之模板模式,附详细python/c++示例代码。
- 概念
- 应用场景
- 注意事项
- 代码示例
- 总结
- 代码链接
模板模式(TemplateMethod)
概念
模板模式,是行为模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为,它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
GoF对模板模式的定义是:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
应用场景
(1)、 有多个子类共有的方法,且逻辑相同。
( 2)、重要的、复杂的方法,可以考虑作为模板方法。
代码示例
C++代码示例
/************************************************************************/
/* 设计模式专题
/*
/* 模板模式
/*
/* Author : zzl
/*
/* 编程环境: window10 vs2010
/*
/* Date : 20180916
/************************************************************************/
#include <iostream>
class MakeCar
{
public:
virtual void MakeHead() = 0;
virtual void MakeBody() = 0;
virtual void MakeTail() = 0;
public:
void Make() //模板函数 把业务逻辑给做好
{
MakeTail();
MakeBody();
MakeHead();
}
};
//
class Jeep : public MakeCar
{
public:
virtual void MakeHead()
{
printf("jeep head\n");
}
virtual void MakeBody()
{
printf("jeep body\n");
}
virtual void MakeTail()
{
printf("jeep tail\n");
}
};
class Bus : public MakeCar
{
public:
virtual void MakeHead()
{
printf("Bus head\n");
}
virtual void MakeBody()
{
printf("Bus head\n");
}
virtual void MakeTail()
{
printf("Bus head\n");
}
};
void main()
{
MakeCar *car = new Bus;
car->Make();
delete car;
MakeCar *car2 = new Jeep;
car2->Make();
delete car2;
}
python代码示例
# -*- coding: utf-8 -*-
###################################################################
# 设计模式专题
#
# 模板模式
#
# Author : zzl
#
# 编程环境: window10 python2.7
#
# Date : 20180916
##################################################################
class MakeCar(object):
def make_head(self):
pass
def make_body(self):
pass
def make_tail(self):
pass
# 模板函数把业务逻辑给做好
def make(self):
self.make_tail()
self.make_head()
self.make_body()
class Jeep(MakeCar):
def make_head(self):
print("jeep head")
def make_body(self):
print("jeep body")
def make_tail(self):
print("jeep tail")
class Bus(MakeCar):
def make_head(self):
print("bus head")
def make_body(self):
print("bus body")
def make_tail(self):
print("bus tail")
if __name__ == "__main__":
bus = Bus()
bus.make()
jeep = Jeep()
jeep.make()