例子:生產一部手機,需要手機殼、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 為了減少簡單工廠類裡面的邏輯判...