23種設計模式之(十三)模板模式(python_c++實現)
阿新 • • 發佈:2018-12-10
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()