簡單工廠模式-之-什麼是產品線

簡單工廠模式中,有一個概念就是使用了多層次的產品結構,那麼什麼是產品結構或者說什麼是產品線?
假定我們有一個基準的產品標準Product,那麼所有繼承該基類或者傳遞基類(不止一層的繼承關係)就可以認為是一個系列的產品結構或者是產品線,我們可以用下面的繼承關係來看

Product1:Product    Product11:Product1  Product12:Product1
Product2:Product    Product21:Product2  Product22:Product2

很明顯,上面的繼承關係中 有兩條產品線,當然實際中的產品線可能是這個樣子的,可見所有的產品線上的產品其實都可以用Product這個基準的產品來表示

在這種產品線下那麼較為簡單的生產產品的方式就是為每一個產品建立一個工廠來生產它,如果把Product這一層抽象為interface那麼就如下圖所示

簡單工廠模式-之-什麼是產品線 And 抽象工廠模式-之-什麼是產品族-LMLPHP

可見,簡單工廠模式中,每一個具體的Product-X都有一個具體的工廠Factory-X來對應的生成產品Product

抽象工廠模式-之-什麼是產品族

如上文所見,具體的工廠Factory-X對應具體的產品Product-X(其實是Product[繼承關係或者是interface的抽象關係]),那麼如果有下面這種情況又如何使用工廠模式來生成Product?

Product1:Product
Product11_0:Product1    Product12_0:Product1
Product11_1:Product1    Product12_1:Product1

即,產品有相近的改版品種,Product11_1是Product11_0的改版.Product12_1是Product12_0的改版.在這裡稱為一個產品族(Product Family).這個時候我們怎麼使用工廠模式呢?還是建立一個一個對對應工廠實現來具體對應Product嗎?顯然,這樣唑並不合適,既然是改版,那麼我們完全可以使用相同的工廠類中不同的工廠方法來創建具體的產品.即,如下圖所示

簡單工廠模式-之-什麼是產品線 And 抽象工廠模式-之-什麼是產品族-LMLPHP

也就是說圖中左側的Factory實現IProduct1下所有的產品族的生成.圖中右邊的Factory實現IProduct2下所有的產品族的生成.這樣具體工廠Factory由於可以生成一條產品線下不同的產品族的產品而變成了抽象工廠.

04-03 00:38