建造者模式,也是一種創(chuàng)建新對(duì)象的設(shè)計(jì)方法,和C++中的虛函數(shù)很類似,但是用到了python自身的虛基類ABCMeta。
1.應(yīng)用場(chǎng)景:
? ? ?某個(gè)類中的函數(shù)較多,且實(shí)現(xiàn)比較復(fù)雜,很多時(shí)候需要繼承的子類重載或者重新定義邏輯;
2.背景基礎(chǔ):
? ? 由于用到python中虛函數(shù),需要了解abc模塊中的ABCMeta和python中類創(chuàng)建對(duì)象時(shí)的__metaclass__屬性含義。
一般地,在某個(gè)類中如果定義__metaclass__=something時(shí),簡(jiǎn)單地說是,創(chuàng)建對(duì)象時(shí),會(huì)首先找到__metaclass__所指向的對(duì)象something,然后使用該對(duì)象進(jìn)行創(chuàng)建對(duì)象。
3.代碼:
#coding:utf-8
from abc import ABCMeta,abstractmethod
class Builder():
__metaclass__=ABCMeta
@abstractmethod
def draw_head(self):
pass
@abstractmethod
def draw_body(self):
pass
class Thin(Builder):
def draw_body(self):
print("Draw Thin Body")
def draw_head(self):
print("Draw Thin Head.")
class Fat(Builder):
def draw_body(self):
print("Draw Fat Body")
def draw_head(self):
print("Draw fat Head.")
class Director():
def __init__(self,person):
self.person = person
def draw(self):
self.person.draw_body()
self.person.draw_head()
if __name__ == "__main__":
fat=Fat()
thin=Thin()
director_thin=Director(thin)
director_thin.draw()
director_fat=Director(fat)
director_fat.draw()
#output:
Draw Thin Body
Draw Thin Head.
Draw Fat Body
Draw fat Head.
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
