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

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

Python建造者模式案例運(yùn)行原理解析

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

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

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

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

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

2. 軟件的例子

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

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

3. 應(yīng)用案例

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

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

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

​ 新電腦類比的例子可能會(huì)有助于區(qū)分建造者模式和工廠模式。假設(shè)你想買一臺(tái)新電腦,如果決定購買一臺(tái)特定的預(yù)配置的電腦型號(hào),例如,最新的蘋果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)

另一個(gè)選擇是購買一臺(tái)定制的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()

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

4. 小結(jié)

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

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

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
999久久久91| 日韩中文欧美在线| 波多野结衣久久精品| 蜜臀国产一区二区三区在线播放| 婷婷综合电影| 日韩av一区二区三区| 国产精品av久久久久久麻豆网| 欧美黄色精品| 精品国产鲁一鲁****| 国产不卡人人| yellow在线观看网址| 精品美女在线视频| 国产传媒av在线| 国户精品久久久久久久久久久不卡| 999国产精品999久久久久久| 婷婷精品进入| 三级欧美在线一区| 亚洲精品大全| 久久国内精品自在自线400部| 欧美日韩一区自拍| 97欧美在线视频| 中文一区在线| 国产欧美高清| 亚洲v在线看| 亚洲专区一区| 国产精品久一| 91精品精品| 国产一级成人av| 欧美手机在线| 欧美日韩va| 欧美成人高清| 国产日韩亚洲| 国产伦精品一区二区三区千人斩| 欧美freesex黑人又粗又大| 麻豆高清免费国产一区| 欧美日韩视频| 国产免费av一区二区三区| 91成人在线网站| 久久精品av麻豆的观看方式| 日韩欧美激情| 欧美有码在线| 国产日韩中文在线中文字幕| 日本不卡视频一二三区| 日韩手机在线| 国产精品高清一区二区| 老司机精品在线| 亚洲黄色免费看| 激情综合在线| 伊人久久亚洲热| 中文字幕av亚洲精品一部二部| 亚洲精品乱码| 国产精品久久久久久久久免费高清| 亚洲我射av| 欧美精品中文| 美女视频免费精品| 日韩一级精品| 香蕉精品视频在线观看| 亚洲福利国产| 99热免费精品| 免费在线观看精品| 亚洲一区二区av| 国产精品蜜芽在线观看| 亚洲精品在线a| 日韩精品一区二区三区免费观看| 日韩精品一区二区三区av| 精品欧美久久| 亚洲免费高清| 中文精品视频| 日韩国产欧美在线播放| 欧美日韩在线精品一区二区三区激情综合| 日韩精品成人在线观看| 欧美私人啪啪vps| 国模大尺度视频一区二区| 中文字幕在线官网| 2023国产精品久久久精品双| 伊人久久大香伊蕉在人线观看热v| 欧美日韩a区| 亚洲女同av| 久久精品国产www456c0m| 久久黄色影视| 国产不卡精品| 免费看一区二区三区| 国产欧美日韩免费观看| 国产精品久久久久久久久久白浆| 91精品尤物| 国产日产一区| 日韩欧美一区二区三区免费看| 亚洲天堂黄色| 精品午夜视频| 啪啪亚洲精品| 1000部精品久久久久久久久| 欧美日中文字幕| 伊人久久成人| 在线精品福利| 麻豆久久久久久| 激情五月综合网| 欧美精品不卡| 99亚洲精品| 国产精品流白浆在线观看| 久久中文视频| 美腿丝袜亚洲一区| 亚洲资源网站| 国产精品av一区二区| 欧美一级全黄| 好看的av在线不卡观看| 久久久精品区| 日本少妇一区二区| 欧美特黄一区| 国产精品地址| 日韩欧美高清一区二区三区| 婷婷国产精品| 欧美精选视频一区二区| 国产精品magnet| 婷婷综合成人| 亚洲开心激情| 日韩视频一区| 在线成人动漫av| 久久久精品午夜少妇| 日本一区二区高清不卡| 久久三级中文| 国产精品视频一区二区三区四蜜臂 | 国产精品高颜值在线观看| 国产探花一区在线观看| 老色鬼久久亚洲一区二区| 在线天堂中文资源最新版| 久久99精品久久久野外观看| 国产免费久久| 国产精品2023| 美腿丝袜亚洲一区| 国产精品白丝av嫩草影院| 国产精品玖玖玖在线资源| 色综合视频一区二区三区日韩 | 国产 日韩 欧美一区| 粉嫩av一区二区三区四区五区 | 91精品一区国产高清在线gif| 亚洲综合在线电影| 91精品高清| 免费观看在线综合色| 婷婷精品在线| 日本aⅴ亚洲精品中文乱码| 日韩在线网址| 精品国产乱码久久久久久1区2匹| 精品国产亚洲一区二区三区大结局| 另类小说一区二区三区| 午夜av成人| 视频一区中文字幕国产| 亚洲男人在线| 欧美国产日韩电影| 成人精品天堂一区二区三区| 怡红院精品视频在线观看极品| 亚洲精品看片| 麻豆国产精品| 国产一级久久| 欧美国产视频| 91精品国产乱码久久久久久久| 免费人成精品欧美精品| 欧美黄色一区二区| 国产二区精品| 国产精品videossex| 欧美成人亚洲| 国产精品男女| 亚洲欧美日韩精品一区二区 | 亚洲精品一级| 国产美女高潮在线观看| 9国产精品视频| 麻豆视频久久| 日韩一区二区三区精品| 日本免费一区二区三区四区| 深夜福利一区| 激情欧美国产欧美| 丰满少妇一区| 国产精品乱战久久久| 亚洲欧美日本日韩| 日本在线精品| 97精品国产福利一区二区三区| 日本亚洲不卡| 男女激情视频一区| 亚洲午夜精品久久久久久app| 久久av影视| 亚洲狼人精品一区二区三区| 蜜桃视频欧美| 丝袜av一区| av在线日韩| 九色porny丨国产首页在线| 日韩一区二区三区精品| 亚洲在线国产日韩欧美| 国产在线日韩| 亚洲午夜av| 亚洲欧美一区在线| 99久久九九| 亚洲国产成人精品女人| 激情久久久久久| 国产伊人精品| 欧美精品黄色| 蜜臀久久99精品久久一区二区| 免费观看亚洲| 久久亚洲国产| 伊人久久大香伊蕉在人线观看热v| 亚洲一区二区小说| 日韩激情综合|