<?php
/** * 抽象工廠模式(abstract factory pattern)是圍繞乙個超級工廠建立其他工廠。該超級工廠又稱為其他工廠的工廠。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
* 在抽象工廠模式中,介面是負責建立乙個相關物件的工廠,不需要顯式指定它們的類。每個生成的工廠都能按照工廠模式提供物件。
* * 主要解決:主要解決介面選擇的問題。
* */
/* 為形狀建立乙個介面 */
/** * inte***ce shape 形狀
* 建立乙個介面。
*/inte***ce
shape
/* 建立實現介面的實體類 */
/** * class rectangle 矩形
*/class
rectangle
implements
shape
}/**
* class square 正方形
*/class
square
implements
shape
}/**
* class circle 圓形
*/class
circle
implements
shape
}/* 為顏色建立乙個介面 */
inte***ce
color
/* 建立實現介面的實體類 */
/** * class red
*/class
redimplements
color
}/**
* class green
*/class
green
implements
color
}/**
* class blue
*/class
blue
implements
color
}/**
* 為 color 和 shape 物件建立抽象類來獲取工廠
* class abstractfactory
*/abstract
class
abstractfactory
class
shapefactory
extends
abstractfactory
return
$shape;}
public
function
getcolor
($colortype)}
class
colo***ctory
extends
abstractfactory
return
$color;}
public
function
getshape
($shapetype)}
/** * 建立乙個工廠創造器/生成器類,通過傳遞形狀或顏色資訊來獲取工廠
* class factoryproducer
*/class
factoryproducer}}
$shapefactory
= factoryproducer:
:getfactory
(\factoryproducer::
shape);
$colo***ctory
= factoryproducer:
:getfactory
(\factoryproducer::
color);
$shape1
=$shapefactory
->
getshape
(\shapefactory::
circle);
$shape2
=$shapefactory
->
getshape
(\shapefactory::
rectangle);
$shape3
=$shapefactory
->
getshape
(\shapefactory::
square);
$shape1
->
draw()
;$shape2
->
draw()
;$shape3
->
draw()
;$color1
=$colo***ctory
->
getcolor
(\colo***ctory::
red)
;$color2
=$colo***ctory
->
getcolor
(\colo***ctory::
green);
$color3
=$colo***ctory
->
getcolor
(\colo***ctory::
blue);
$color1
->
fill()
;$color2
->
fill()
;$color3
->
fill()
;
PHP設計模式 抽象工廠
宣告 本系列部落格參考資料 大話設計模式 作者程杰。前面我們介紹了簡單工廠和工廠方法設計模式,今天我們學習最後乙個工廠 抽象工廠。案例 追mm少不了請吃飯了,去麥當勞,只管向服務員說 兩個b 就行了。麥當勞就是b 的abstractfactory,b 裡含有漢堡,雞翅和飲料.麥當勞或肯德基會根據b ...
PHP設計模式 抽象工廠
在學習過工廠方法之後,我所了解的工廠方法基本是去建立乙個物件,例如在玩遊戲的時候,建立了乙個關羽英雄,乙個張飛英雄這樣。但是有時候程式設計時可能需要建立一組物件,這就出現了第二種建立型設計模式 抽象工廠方法 abstractfactory 比方說,我在建立關羽的時候手上拿著青龍偃月刀,騎著赤兔馬。建...
PHP設計模式 工廠模式之抽象工廠模式
abstract class 2 建立ttd 抽象類 ttd 抽象類 class ttdencoder abstract class ttdencoder 3 建立contact 抽象類 contact 抽象類 class contactencoder abstract class contacte...