1. 程式人生 > >Python的建立型設計模式之抽象工廠模式

Python的建立型設計模式之抽象工廠模式

注:書上定義和展示程式碼均來自《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兩人完全不鳥對方只顧各自完成自己的任務高吧。