Python的建立型設計模式之抽象工廠模式
阿新 • • 發佈:2019-02-16
注:書上定義和展示程式碼均來自《Python程式設計實戰》
抽象工廠模式,書上定義:用來建立複雜的物件,這種物件由許多小的物件組成,而這些小的物件都屬於特定的“系列”。回頭再讀這段話,然後再回想敲過書上的這個例項。
用簡單話來概括就是,你現在要完成一個東西,這個東西里面有幾部分(3部分吧),這3部分吧,你可以用紅色完成,但你也可以用綠色完成,反正最後這個東西成型了,咦你一看,哦這裡面是3部分哦。因此,關鍵就在於紅色有它自己的心路歷程,綠色也有它的心路歷程,但是總的目的,都是成為這個東西的一部分。這是我現在所能舉例子來說明的所謂“經典的抽象工廠模式”。
而python風格的抽象工廠模式是,因為,雖然紅色是紅色,綠色是綠色,但它們要成為這個東西的一部分,有些心路歷程是一樣的嘛,因此,沒有必要把這些一樣的心路歷程再寫一邊,需要完成的就是屬於自己的那部分。
class RedFactory: @classmethod def make_diagram(Class, width, height): return Class.Diagram(width, height) @classmethod def make_rectangle(Class, x, y, width, height, fill="white", stroke="black"): return Class.Rectangle(x, y, width, height, fill, stroke) @classmethod def make_text(Class, x, y, text, fontsize=12): return Class.Text(x, y, text, fontsize) class Text: def __init__(self, x, y, text, fontsize): self.x = x self.y = y self.rows = [list(text)] class Rectangle: def __init__(self, x, y, width, height, fill, stroke): pass class Diagram: def __init__(self, width, height): self.width = width self.height = height def add(self): pass class GreenFactory(RedFactory): SVE_TEXT = """<text x="{x}" y="{y}" text-anchor="left" font-family="sans-serif" font-siez="{fontsize}">{text}</text>""" SVE_SCALE = 20 class Text: def __init__(self, x, y, text, fontsize): x *= SvgDiagramFactory.SVE_SCALE y *= SvgDiagramFactory.SVE_SCALE class Rectangle: def __init__(self): pass class Diagram: def __init__(self): pass def add(self): pass
我們具體看看程式碼,紅色和綠色所共有的心路歷程,叫做“類方法”,到時呼叫這些方法的時候,就是紅色、綠色這個類呼叫。
我個人這裡對抽象工廠模式還是沒什麼感覺呢,只能說自己接觸的少吧。這種模式就是慢慢向併發理念靠近哦?我是這樣想,好比AB兩個人同時完成一件事,這樣抽象工程模式可能比AB兩人完全不鳥對方只顧各自完成自己的任務高吧。