python設計模式詳解 python設計模式

2021-10-11 01:25:14 字數 3400 閱讀 3241

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...