python 抽象工廠模式

2021-09-29 10:25:26 字數 3992 閱讀 1133

例子:生產一部手機,需要手機殼、cpu、作業系統三類物件進行組裝,其中每類物件有不同的種類,對每個具體工廠,分別生產一部手機所需要的三個物件

相比工廠方法模式,抽象工廠模式中的每個具體工廠都生產一套產品

給一套系統做過限制(mifactory、huaweifactory),抽象工廠模式

from abc import abstractmethod,abcmeta

# --

----

-抽象產品--

----

----

#手機殼

class phoneshell

(metaclass=abcmeta)

: @abstractmethod

def show_shell

(self)

: pass

class cpu

(metaclass=abcmeta)

: @abstractmethod

def show_cpu

(self)

: pass

class os

(metaclass=abcmeta)

: @abstractmethod

def show_os

(self)

: pass

# --

----

----抽象工廠--

----

----

----

-#必須是一套的不能少乙個 ,返回各子的物件,例如 手機殼 cpu 作業系統

class phonefactory

(metaclass=abcmeta)

: @abstractmethod

def make_shell

(self)

: pass

@abstractmethod

def make_cpu

(self)

: pass

@abstractmethod

def make_os

(self)

: pass

# --

----具體產品--

----

----

----

-#小手機殼 傳phoneshell實現他裡面的方法(繼承)

class smallshell

(phoneshell)

: def show_shell

(self)

:print

("普通手機小手機殼"

)class bigshell

(phoneshell)

: def show_shell

(self)

:print

("普通手機大手機殼"

)(phoneshell)

: def show_shell

(self)

:print

("蘋果手機"

)class snapdragoncpu

(cpu)

: #預設是false 如果開啟怎麼怎麼樣

#def __init__(self,is_gaopei=false):

def show_cpu

(self)

:print

("驍龍cpu"

)class mediatekcpu

(cpu)

: def show_cpu

(self)

:print

("聯發科cpu"

)(cpu)

: def show_cpu

(self)

:print

("蘋果cpu"

)class android

(os)

: def show_os

(self)

:print

("android系統"

)class ios

(os)

: def show_os

(self)

:print

("ios系統"

)# --

----具體工廠--

-------

#只有小公尺 這樣才可以 其它不行,mifactory做了個限制 低中高 這部分是彙總在一起

class mifactory

(phonefactory)

: #製作cpu

def make_cpu

(self)

: #選擇誰的cpu

return

snapdragoncpu()

def make_os

(self)

:return

android()

def make_shell

(self)

:return

bigshell()

class huaweifactory

(phonefactory)

: def make_cpu

(self)

:return()

def make_os

(self)

:return

ios(

) def make_shell

(self)

:return()

class iphonefactory

(phonefactory)

: def make_cpu

(self)

:return()

def make_os

(self)

:return

ios(

) def make_shell

(self)

:return()

# --

----客戶端

class phone:

def __init__

(self,cpu,os,shell)

: self.cpu = cpu

self.os = os

self.shell = shell

def show_info

(self)

:print

("手機資訊"

) self.cpu.

show_cpu()

self.os.

show_os()

self.shell.

show_shell()

#傳乙個工廠進來

優點:將客戶端與類的具體實現分離

每個工廠建立了乙個完整的產品系列,使得易於交換產品系列

有利於產品的一致性(即產品之間的約束關係)

缺點:難以支援新種類的(抽象)產品

from abc import abstractmethod,abcmeta

#手機殼

class phoneshell(metaclass=abcmeta):

@abstractmethod

def show_shell(self):

pass

#小手機殼 傳phoneshell實現他裡面的方法(繼承他的方法)

class smallshell(phoneshell):

def show_shell(self):

print(「普通手機小手機殼」)

抽象工廠模式(python)

抽象工廠模式 與簡單工廠模式的最主要區別是,簡單工廠模式在工廠類中包含了邏輯判斷,能夠根據客戶端的選擇條件來動態建立物件,解除了客戶端 對應用的依賴。但是,在新增新的邏輯時,需要修改工廠類,違反了開放 封閉原則。抽象工廠模式建立了乙個抽象工廠,並由此建立了多個子工廠,乙個子工廠對應乙個型別的例項物件...

抽象工廠模式 抽象工廠模式

抽象工廠模式其實是圍繞了乙個超級工廠建立其他的工廠 可參考工廠模式 這個超級工廠又可以想像成是其他工廠的工廠,這種設計模式是一種建立型模式。在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指出其類。每個生成的工廠都能按照工廠模式提供物件。意圖提供乙個建立一系列相關或相互依賴物件的介面,...

抽象工廠模式 python版

抽象工廠模式 提供乙個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。優點 易於交換 產品系列 只要更改相應的工廠即可。缺點 建立產品的時候很繁瑣,需要增加和修改很多東西。優化1 為了避免客戶端有過多的邏輯判斷,可以封裝出乙個簡單工廠類來生成產品類。優化2 為了減少簡單工廠類裡面的邏輯判...