def __delattr__(self, name):"""remove non-slot field attribute."""
try:delself._attrs[name]exceptkeyerror:raiseattributeerror(name)def __str__(self):return "%s.%s" %(self.model_name, self.name)def __repr__(self):return "%s.%s" % (self.model_name, self.name)
一、 建造者模式
想要建立乙個由多個部分構成的物件,而且他的構成需要一步接一步地完成。只有當各個部分都建立好,這個物件才是完整的。這時就需要建造者模式
建造者設計模式:將乙個複雜物件的構造過程與其表現分離,構造過程可用於建立多個不同的表現。
該模式中有兩個參與者:建造者和指揮者
建造者負責建立複雜物件的各個組成部分。
指揮者使用建造者例項控制建造的過程。
1.工廠模式以單個步驟建立物件,而建造者模式以多個步驟建立獨享,並且幾乎始終使用同乙個指揮者;
2.在工廠模式下,會立即返回乙個建立好的物件;而在建造者模式下,僅在需要時客戶端**才顯示地請求指揮者返回最終的物件。
1. 建造者模式的蘋果電腦應用案例
類裡面套乙個類,這種寫法可以禁止直接例項化乙個類的簡潔方式
乙個蘋果電腦的例子,製造商將所有的硬體規格都隱藏了起來,客戶只知道去買某個品牌和型號的筆記本
過程的引數,讓購買者無需關心內部生產的過程
#設計模式
mini14 = '1.4ghz mac mini'
self.menory= 8self.hdd= 500self.gpu= 'inter hd graphics 5000'
def __str__(self):
info=('model:{}'.format(mini14),'memory:{}'.format(self.menory),'hard disk:{}'.format(self.hdd),'graphics card: {}'.format(self.gpu))return '\n'.join(info)defbuild_computer(self,model):if (model==mini14):returnself.macmini14()else:print("i dont know how to build {}".format(model))if __name__=='__main__':
mac_mini=afac.build_computer(mini14)print (mac_mini)
工廠模式和建造者模式的區別
工廠模式以單個步驟建立物件,建立者模式以多個步驟建立物件,並且幾乎始終會使用乙個指揮者。
在工廠模式下,會立即返回乙個建立好的物件;而在建造者模式下,僅在需要時客戶端**才顯示地請求指揮者返回最終的物件
2. 案例二:作為指揮者向製造商提供指令,製作想要的電腦
首先例項化hardwareengineer,呼叫並傳參construct_computer(self, memory, hdd, gpu),再去例項化computerbuilder()--> computer()
列表式執行函式
[step for step in (self.builder.configure_momory(memory),
self.builder.configure_hdd(hdd),
self.builder.configure_gpu(gpu))]
classcomputer:def __init__(self, serial_number):
self.serial=serial_number
self.memory= none #單位為gb
self.hdd = none #單位為gb
self.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)classcomputerbuilder:def __init__(self):
self.computer= computer('ag23385193')defconfigure_momory(self, amount):
self.computer.memory=amountdefconfigure_hdd(self, amount):
self.computer.hdd=amountdefconfigure_gpu(self, gpu_model):
self.computer.gpu=gpu_modelclasshardwareengineer:def __init__(self):
self.builder=nonedefconstruct_computer(self, memory, hdd, gpu):
self.builder=computerbuilder()
[stepfor step in(self.builder.configure_momory(memory),
self.builder.configure_hdd(hdd),
self.builder.configure_gpu(gpu))]
@propertydefcomputer(self):returnself.builder.computerdefmain():
engineer=hardwareengineer()
engineer.construct_computer(hdd=500, memory=8, gpu='geforce gtx 650 ti')
computer=engineer.computerprint(computer)if __name__ == '__main__':'''通過hardwareengineer(傳參呼叫computerbuilder,可以使用其他類也可以) --> computerbuilder --> computer(負責列印輸出資料)'''main()
'model:{}'.format(mini14),
'memory:{}'.format(self.menory),
'hard disk:{}'.format(self.hdd),
'graphics card: {}'.format(self.gpu))
return'\n'.join(info)
defbuild_computer(self,model):if(model==mini14):returnself.macmini14()
else:print("i dont know how to build {}".format(model))
mac_mini=afac.build_computer(mini14)
print(mac_mini)
經典案例 Python詳解設計模式 策略模式
完成一項任務往往有多種方式,我們將其稱之為策略。比如,超市做活動,如果你的購物積分滿1000,就可以按兌換現金抵用券10元,如果購買同一商品滿10件,就可以打9折,如果如果購買的金額超過500,就可以享受滿減50元的優惠。這是三個不同的 策略。再比如,去外出旅遊,我們可以選擇火車,也可以選擇公共汽車...
設計模式詳解 設計模式簡介
乙個模式應該包括的方面 模式的名稱 模式的目的 模式的實現 模式的約束 為什麼要學習設計模式?1.利用解決方案 2.建立通用術語,方便交流 3.對於問題,設計過程和物件導向,模式給你乙個更高層次的視角,這樣的視角將你從過早處理細節中解放出來。4.即使你不使用直接設計模式,避免龐大的繼承體系也會導致改...
Python設計模式之建造者模式例項詳解
建造者模式 builder pattern 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示 下面是乙個建造者模式的demo usr bin env python coding utf 8 author andy 大話設計模式 設計模式 建造者模式 建造者模式 builder...