模板方法模式:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中。因此模板方法使得子類可以在不改變一個演算法的結構的情況下重新定義該演算法的某些特定變數。
優點:把不變行為搬移到超類,去除子類中的重複代碼。
#encoding=utf-8##by panda#模板方法模式def printInfo(info): print unicode(info, 'utf-8').encode('gbk')#金庸小說試題考卷class TestPaper: def TestQuestion1(self): printInfo('練成倚天劍和屠龍刀的玄鐵可能是[] a.球墨鑄鐵 b.馬口鐵 c.高速合金鋼 d.碳素纖維') printInfo('答案:'+self.Answer1()) def TestQuestion2(self): printInfo('楊過、程英、陸無雙剷除了情花,造成[] a.使這種植物不再害人 b.使一種珍稀物種滅絕 c.破壞生態平衡 d.造成該地區沙漠化') printInfo('答案:'+self.Answer2()) def TestQuestion3(self): printInfo('藍鳳凰致使華山師徒、桃穀六仙嘔吐不止,如果你是大夫,會給他們開什麼藥[] a.阿司匹林 b. 牛黃解毒片 c.氟呱酸 d.喝大量的生牛奶 e.以上全不對') printInfo('答案:'+self.Answer3()) def Answer1(self): return '' def Answer2(self): return '' def Answer3(self): return '' #學生甲class TestPaperA(TestPaper): def Answer1(self): return 'A' def Answer2(self): return 'B' def Answer3(self): return 'C'#學生乙class TestPaperB(TestPaper): def Answer1(self): return 'B' def Answer2(self): return 'D' def Answer3(self): return 'E'def clientUI(): a = TestPaperA(); a.TestQuestion1() a.TestQuestion2() a.TestQuestion3() b = TestPaperB(); b.TestQuestion1() b.TestQuestion2() b.TestQuestion3() returnif __name__ == '__main__': clientUI();
類圖: