电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

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

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

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

​ 假設我們要創建一個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,則是使用工廠模式。所有硬件的規格都已經有制造商預先確定,制造商不用向你咨詢就知道自己該做些什么,它們通常接收的僅僅是單條指令。代碼如下

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

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以及一步接一步裝配一臺電腦的過程,這樣現在就支持不同的配置了(注意, memory、 hdd及gpu是形參并未預先設置)。

4. 小結

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 底部填充胶_电子封装胶_芯片封装胶_芯片底部填充胶厂家-东莞汉思新材料 | 泵阀展|阀门展|水泵展|流体机械展 -2025上海国际泵管阀展览会flowtech china | 茶楼装修设计_茶馆室内设计效果图_云臻轩茶楼装饰公司 | 管形母线,全绝缘铜管母线厂家-山东佰特电气科技有限公司 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 线粒体膜电位荧光探针-细胞膜-标记二抗-上海复申生物科技有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 上海深蓝_缠绕机_缠膜机-上海深蓝机械装备有限公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | RO反渗透设备_厂家_价格_河南郑州江宇环保科技有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 合肥白癜风医院_[治疗白癜风]哪家好_合肥北大白癜风医院 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 加盟店-品牌招商加盟-创业项目商机平台 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 专业生产动态配料系统_饲料配料系统_化肥配料系统等配料系统-郑州鑫晟重工机械有限公司 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 电缆故障测试仪_电缆故障定位仪_探测仪_检测仪器_陕西意联电气厂家 | 复盛空压机配件-空气压缩机-复盛空压机(华北)总代理 | 新车测评网_网罗汽车评测资讯_汽车评测门户报道 | 货车视频监控,油管家,货车油管家-淄博世纪锐行电子科技 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 番茄畅听邀请码怎么输入 - Dianw8.com | 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 铝合金重力铸造_铝合金翻砂铸造_铝铸件厂家-东莞市铝得旺五金制品有限公司 | 测试治具|过炉治具|过锡炉治具|工装夹具|测试夹具|允睿自动化设备 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 危废处理系统,水泥厂DCS集散控制系统,石灰窑设备自动化控制系统-淄博正展工控设备 | 万师讲师网-优质讲师培训师供应商,讲师认证,找讲师来万师 | 棕刚玉-白刚玉厂家价格_巩义市东翔净水材料厂 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 抓斗式清污机|螺杆式|卷扬式启闭机|底轴驱动钢坝|污水处理闸门-方源水利机械 | 六自由度平台_六自由度运动平台_三自由度摇摆台—南京全控科技 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 |