国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - python建造者模式案例運行原理解析

python建造者模式案例運行原理解析

2020-06-29 12:14JonnyJiang-zh Python

這篇文章主要介紹了python建造者模式案例運行原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

建造者模式的適用范圍:想要創建一個由多個部分組成的對象,而且它的構成需要一步接一步的完成。只有當各個部分都完成了,這個對象才完整。建造者模式表現為復雜對象的創建與表現相分離,這樣,同一個過程就有不同的表現。

? 假設我們要創建一個HTML頁面生成器就可以使用建造者模式。該模式中,有兩個參與者:建造者(builder)和指揮者(director)。建造者負責創建負責對象的各個組成部分。在HTML例子中,這些組成部分包括:頁面標題、文本標題、內容主體和頁腳。指揮者使用一個建造者實例控制建造的過程。對于HTML示例,這里指調用建造者的函數設置頁面標題、文本標題等。使用不同的建造者實例讓我們可以創建不同的HTML頁面,而無需更換指揮者代碼。

1. 現實生活中的例子

快餐店使用的即是建造者設計模式。即使存在多種漢堡包(經典款、奶酪漢堡包等等)和不同的包裝(大、中、小盒子等),準備一個漢堡包及打包(盒子或者紙袋)的流程都是一樣的。兩種漢堡包的區別在于表現,而不在于建造的過程。指揮者是出納員,將需要準備什么餐品的指令傳達給工作人員,即建造者。

2. 軟件的例子

本文一開始提到的HTML例子,在django-widgy中得到了實際應用。django-widgy是一個Django的第三方樹編輯器擴展,可用作內容管理系統。它包含一個網頁構建器,用來創建具有不同布局的HTML頁面。

? django-query-builder是另一個基于建造者模式的Django第三方擴展庫,該擴展庫可用于動態地構建SQL查詢。使用它,我們可以控制一個查詢的方方面面,并能創建不同種類的查詢。

3. 應用案例

如果我們知道一個對象必須經過多個步驟來創建,并且要求同一個構造過程可用于產生不同的表現,就可以使用建造者模式。例如頁面生成器、文檔轉換器以及用戶界面等等。

? 工廠模式與建造者模式的區別在于工廠模式以單個步驟創建對象,而建造者模式以多個步驟創建對象,且幾乎始終使用一個指揮者。一些有針對性的建造者模式實現并未使用指揮者,如Java的StringBuffer。

? 另一個區別是,在工廠模式下,會立即返回一個創建好的對象;而在建造者模式下,僅需要時客戶端代碼才顯示地請求指揮者返回最終的對象。

? 新電腦類比的例子可能會有助于區分建造者模式和工廠模式。假設你想買一臺新電腦,如果決定購買一臺特定的預配置的電腦型號,例如,最新的蘋果1.4GHz Mac mini,則是使用工廠模式。所有硬件的規格都已經有制造商預先確定,制造商不用向你咨詢就知道自己該做些什么,它們通常接收的僅僅是單條指令。代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
MINI14 = '1.4GHz Mac mini'
class AppleFactory:
    class MacMini14:
        def __init__(self):
            self.memory = 4 # 單位為GB
      self.hdd = 500 # 單位為GB
      self.gpu = 'Intel HD Graphics 5000'
        def __str__(self):
            info = ('Model: {}'.format(MINI14),'Memory: {}GB'.format(self.memory),'Hard Disk: {}GB'.format(self.hdd),'Graphics Card: {}'.format(self.gpu))
            return '\n'.join(info)
    def build_computer(self, model):
        if (model == MINI14):
            return self.MacMini14()
        else:
            print("I dont't know how to build {}".format(model))
if __name__ == '__main__':
    afac = AppleFactory()
    mac_mini = afac.build_computer(MINI14)
    print(mac_mini)

另一個選擇是購買一臺定制的PC。假若這樣,使用的即是建造者模式。你是指揮者,向制造商(建造者)提供指令說明心中理想的電腦規格。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Computer:
    def __init__(self, serial_number):
        self.serial = serial_number
        self.memory = None # 單位為GB
        self.hdd = None # 單位為GB
        self.gpu = None
    def __str__(self):
        info = ('Memory: {}GB'.format(self.memory),'Hard Disk: {}GB'.format(self.hdd),'Graphics Card: {}'.format(self.gpu))
        return '\n'.join(info)
class ComputerBuilder:
    def __init__(self):
        self.computer = Computer('AG23385193')
    def configure_memory(self, amount):
        self.computer.memory = amount
    def configure_hdd(self, amount):
        self.computer.hdd = amount
    def configure_gpu(self, gpu_model):
        self.computer.gpu = gpu_model
class HardwareEngineer:
    def __init__(self):
        self.builder = None
    def construct_computer(self, memory, hdd, gpu):
        self.builder = ComputerBuilder()①
        [step for step in (self.builder.configure_memory(memory),self.builder.configure_hdd(hdd),self.builder.configure_gpu(gpu))]
    @property
    def computer(self):
        return self.builder.computer
def main():
    engineer = HardwareEngineer()
    engineer.construct_computer(hdd=500, memory=8, gpu='GeForce GTX 650 Ti')
    computer = engineer.computer
    print(computer)
if __name__ == '__main__':
    main() 

基本的變化是引入了一個建造者ComputerBuilder、一個指揮者HardwareEngineer以及一步接一步裝配一臺電腦的過程,這樣現在就支持不同的配置了(注意, memory、 hdd及gpu是形參并未預先設置)。

4. 小結

本章中,我們學習了如何使用建造者設計模式。可以在工廠模式(工廠方法或抽象工廠)不適用的一些場景中使用建造者模式創建對象。在以下幾種情況下,與工廠模式相比,建造者模式是更好的選擇。

  • [ ] 想要創建一個復雜對象(對象由多部分組成,且創建對象的過程結果許多步驟,也許這些步驟還需要特定的順序)。
  • [ ] 要求一個對象有許多不同的表現,并希望對象的構造與表現得耦合度低
  • [ ] 想要在不同得時間創建對象

? 我們看到了快餐店如何將建造者模式用于準備食物,兩個第三方Django擴展包( django-widgy和django-query-builder)各自如何使用建造者模式來生成HTML頁面和動態的SQL查詢。我們重點學習了建造者模式與工廠模式之間的區別,通過對預先配置(工廠)電腦與客戶定制(建造者)電腦進行訂單類比來理清這兩種設計模式。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/JonnyJiang-zh/p/13195123.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲一区二区 | 国产成人99久久亚洲综合精品 | 日韩一区中文字幕 | 一区不卡 | 日本一区二区三区免费观看 | 探花在线观看 | 日韩一二三| 成人免费视频网站在线观看 | 亚洲成人综合网站 | 成人免费视频网址 | 日韩中文字幕在线免费观看 | 久久久久久亚洲 | 久久久久久一区 | 骚视频在线观看 | 国产资源免费观看 | 精品国产黄a∨片高清在线 黄色大片aaaa | 欧美第一视频 | 亚洲国产区 | 亚洲国产精品一区 | 久久波多野结衣 | 精品视频一区二区 | 欧美精品久久久久 | 久草视频免费看 | 久久综合伊人77777蜜臀 | 亚洲综合视频在线观看 | 久久综合久久88 | 欧美午夜一区二区三区 | 天天干天天看天天操 | 日本少妇一区二区三区 | 欧美视频在线一区 | 精品日韩一区二区 | 羞羞的视频在线 | 亚洲精品成人av久久 | 中文字幕国产在线视频 | 国产白虎| 亚洲综合二区 | 黄色片网站在线免费观看 | 毛片综合 | 黄色av免费网站 | 久久免费精品 | av网站推荐|