日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:197日期:2022-07-19 13:29:29

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

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

1. 現(xiàn)實生活中的例子

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

2. 軟件的例子

本文一開始提到的HTML例子,在django-widgy中得到了實際應(yīng)用。django-widgy是一個Django的第三方樹編輯器擴展,可用作內(nèi)容管理系統(tǒng)。它包含一個網(wǎng)頁構(gòu)建器,用來創(chuàng)建具有不同布局的HTML頁面。

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

3. 應(yīng)用案例

如果我們知道一個對象必須經(jīng)過多個步驟來創(chuàng)建,并且要求同一個構(gòu)造過程可用于產(chǎn)生不同的表現(xiàn),就可以使用建造者模式。例如頁面生成器、文檔轉(zhuǎn)換器以及用戶界面等等。

​ 工廠模式與建造者模式的區(qū)別在于工廠模式以單個步驟創(chuàng)建對象,而建造者模式以多個步驟創(chuàng)建對象,且?guī)缀跏冀K使用一個指揮者。一些有針對性的建造者模式實現(xiàn)并未使用指揮者,如Java的StringBuffer。

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

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

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。假若這樣,使用的即是建造者模式。你是指揮者,向制造商(建造者)提供指令說明心中理想的電腦規(guī)格。

class Computer:def __init__(self, serial_number):self.serial = serial_numberself.memory = None # 單位為GBself.hdd = None # 單位為GBself.gpu = Nonedef __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 = amountdef configure_hdd(self, amount):self.computer.hdd = amountdef configure_gpu(self, gpu_model):self.computer.gpu = gpu_modelclass HardwareEngineer:def __init__(self):self.builder = Nonedef 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))]@propertydef computer(self):return self.builder.computerdef main():engineer = HardwareEngineer()engineer.construct_computer(hdd=500, memory=8, gpu=’GeForce GTX 650 Ti’)computer = engineer.computerprint(computer)if __name__ == ’__main__’:main()

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

4. 小結(jié)

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产激情综合| 国产精品国产一区| 久久激情五月婷婷| 性一交一乱一区二区洋洋av| 日产精品一区二区| 日本少妇精品亚洲第一区| 欧美偷窥清纯综合图区| 一区二区电影| 欧美一级一区| 国产videos久久| 久久99久久人婷婷精品综合| 日韩在线欧美| 国产一区久久| 日韩**一区毛片| 国产一区二区三区四区大秀| 欧美国产亚洲精品| 99久久久久久中文字幕一区| 亚洲一区欧美二区| 日本成人在线不卡视频| 国产精品18| re久久精品视频| 日本视频一区二区| 精品美女久久| 久久福利精品| 日韩av不卡一区二区| 蜜桃久久av一区| 国产精品hd| 亚洲韩日在线| 爽好多水快深点欧美视频| 国产精品亚洲一区二区在线观看| 首页国产精品| 中文字幕一区二区三区四区久久| 五月亚洲婷婷| 麻豆网站免费在线观看| 99tv成人| 日韩精品久久久久久久软件91| 国产精成人品2018| 精品日韩一区| 亚洲一级大片| 国产一区三区在线播放| 国产精品国产三级国产在线观看| 亚洲免费成人| 日韩av影院| 久久中文字幕av一区二区不卡| 日本在线不卡视频| 特黄毛片在线观看| 婷婷综合电影| 日韩精品欧美激情一区二区| 亚洲不卡视频| 久久婷婷久久| 欧美成人精品一级| 亚洲精品一二三区区别| 国产亚洲精品精品国产亚洲综合| 国产探花在线精品| 91九色精品国产一区二区| 国产精品一区亚洲| 色婷婷久久久| 国产精品久久| 国产精品日韩久久久| 日韩精品一区二区三区av | 婷婷综合六月| 久久精品国产福利| 亚洲区国产区| 蜜桃国内精品久久久久软件9| 欧美一区自拍| 欧美+日本+国产+在线a∨观看| 美女久久久久久| 日韩区一区二| 亚洲欧美日本日韩| 92国产精品| 欧美1区2区3| 日本不卡视频在线观看| 成人va天堂| 免费在线观看一区| 日本亚州欧洲精品不卡| 五月天久久网站| 日韩电影免费网址| 久久亚洲精精品中文字幕| 亚洲色图国产| 视频在线观看国产精品| 亚洲五月婷婷| 欧美亚洲国产激情| 成人看片网站| 少妇精品在线| 欧美日韩国产亚洲一区| 精品亚洲美女网站| 九九精品调教| 在线一区av| 国产精品久久久久久久久妇女| 国产精品探花在线观看| 婷婷成人av| 青青在线精品| 欧美久久一区二区三区| 亚洲精品护士| 亚洲精品影视| 亚洲欧洲av| 日本成人在线网站| 国产日韩在线观看视频| 在线精品国产亚洲| 亚洲一区欧美| 98精品视频| 成人自拍av| 亚洲午夜电影| 久久精品伊人| 亚洲黄色网址| 久久国产精品成人免费观看的软件| 久久久久国产精品一区二区| 欧美亚洲国产精品久久| 宅男噜噜噜66国产日韩在线观看| 亚洲高清不卡| 黄色在线一区| 少妇精品久久久一区二区| 91成人在线网站| 欧美日韩一区二区高清| 国产经典一区| 伊人久久在线| 久久久精品五月天| 女同性一区二区三区人了人一 | 日韩一二三区在线观看| 日韩精选在线| 精品国产美女a久久9999| 国产盗摄——sm在线视频| 欧美~级网站不卡| 日韩精品一区二区三区中文| 精品一区二区三区的国产在线观看 | 国产高清一区二区| 中文不卡在线| 久久99久久久精品欧美| 欧美二三四区| 国产精品日韩久久久| 国产欧美日韩精品一区二区免费| 精品久久中文| 婷婷成人在线| 日韩欧美2区| 97精品国产一区二区三区| 91精品国产调教在线观看| 亚洲天堂日韩在线| 成人在线超碰| 天堂av在线一区| 麻豆极品一区二区三区| av在线日韩| 日韩黄色免费网站| 精品国产91| 亚洲精品va| 国产欧美精品久久| 999久久久精品国产| 日本成人中文字幕| 久久精品中文| 国产精品一区二区美女视频免费看| 美女视频黄 久久| 不卡av一区二区| 美女精品久久| 日韩中文av| av亚洲一区二区三区| 日韩中文字幕一区二区三区| 91欧美日韩在线| 成人看片网站| 久久国内精品| 99精品在线| 亚洲欧洲日韩精品在线| 国产高潮在线| 久久av一区二区三区| 国产麻豆一区二区三区| 91久久久久| 91亚洲人成网污www| 99pao成人国产永久免费视频 | 尹人成人综合网| 国产精品久久久久久久久久白浆 | 久久国产精品久久w女人spa| 美女精品一区| 蜜桃精品在线| 国产精品中文字幕制服诱惑| 人人爽香蕉精品| 性欧美xxxx免费岛国不卡电影| 亚洲欧美日本国产| 国产一区观看| 国产一区二区三区国产精品| 欧美中文字幕| 天堂日韩电影| 国产精品99一区二区三| 国产欧美一区二区三区精品观看 | 日韩精品91亚洲二区在线观看| 一区二区三区视频免费观看 | 欧美综合二区| 欧美69视频| 国产精品一区二区三区www| 亚洲日本国产| 免费观看亚洲| 国产精品扒开腿做爽爽爽软件| 亚洲五月综合| 亚洲欧美日韩国产一区二区| 亚洲先锋成人| 日本美女一区| 国产 日韩 欧美 综合 一区| 国产欧美日韩一级| 日韩国产欧美在线播放| 妖精视频成人观看www| 99免费精品| 亚洲成人精品| 日韩一区三区|