設計模式-行為型模式,模板模式(16)


模板方法模式:定義一個工作流或算法的基本骨架,而將一些特定步驟的實現延遲到子類中。

模板方法模式是面向對象編程實踐中最容易總結出來的模式,即使一開始不知道什么叫設計模式,可能經常都已經用到了這種模式:

 

 

class Daili(object):
    def __init__(self,daili_name):
        self.daili_name = daili_name

    def extract(self):
        """從網站提取代理ip"""
        pass  ##由子類返回代理ip的列表

    def check_daili(self, daili_list):
        print '檢測 ' +self.daili_name +  ' 代理,保存其中的可用的代理到redis'

    def collect_daili(self):
        daili_list = self.extract()
        self.check_daili(daili_list)


class XiciDaili(Daili):
    def extract(self):
        '''從希刺代理提取ip'''
        print '正在提取 ' + self.daili_name + ' 網站的代理'
        return ['some ip']


class YaoYaoDaili(Daili):
    def extract(self):
        '''從瑤瑤代理網站提取ip'''
        print '正在提取 ' + self.daili_name + ' 網站的代理'
        return ['some ip']  #


XiciDaili('希刺').collect_daili()
YaoYaoDaili('瑤瑤').collect_daili()

 

 

 

實現代理ip采集,可能一開始只寫xici代理提取,但是后來又寫yaoyao代理提取。

但兩個類,只有提取ip的正則或者css選擇器寫法不同,其他的檢測ip可用性和保存代理到redis,都是相同的。

所以使用模板模式非常方便,不管再怎么采集其他各種網站的代理,只需要新寫自己的提取方法就可以,其余的檢測和保存則無需重復復制粘貼。

 

 

2、模板模式用在業務流程中也是十分方便十分常見的,子類只需要繼承重寫很少一部分,骨架在模板類,要是修改基礎東西,直接去修改模板類就可以,一次修改到處生效。如果使用模塊加函數編程,需要修改幾十上百個文件批量修改。

oop不是只能用在基礎共用類,業務流程類中也適合。

 

 3、模板模式和策略模式可以互相替換。

如果把上面代碼稱為投,下面代碼稱為腳,模板模式一般是頭重腳輕,策略模式頭輕腳重。這是一般情況。子類只需要重寫少數方法,也有的是父類暴露出非常多的抽象方法,而僅有少數實體運行代碼。

 一種先寫個大模板類,然后所有子類去重寫某個方法。
一種是寫很多個策略類,然后用一個類去組合這些類,調用策略類的方法。

模板模式 1模板父類 + n子類
策略模式 n策略類 + 1個使用策略的類


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM