適用性
php享元(輕量級)模式
就是緩存了創(chuàng)建型模式創(chuàng)建的對象飘弧,不知道為什么會歸在結構型模式中,個人覺得創(chuàng)建型模式更合適砚著,哈哈~
其次次伶,享元強調的緩存對象,外觀模式強調的對外保持簡單易用稽穆,是不是就大體構成了目前牛逼哄哄且滿大的街【依賴注入容器】
下面我們借助最簡單的’工廠模式‘來實現(xiàn)享元模式冠王,就是給工廠加了個緩存池
UML
代碼示例
/**
* 農場
*
* 生產動物
*/
class Farm
{
? /**
? * 對象緩存池
? * @var array
? */
? private $_farmMap = [];
? /**
? * 構造函數(shù)
? */
? public function __construct()
? {
? ? echo "-----------初始化了一個農場----------- \n\n";
? }
? /**
? * 生產方法
? *
? * 生產農物
? *
? * @param? string $type 農場類型
? * @return mixed
? */
? public function produce($type='')
? {
? ? // 對象緩存池判斷
? ? if (key_exists($type, $this->_farmMap)) {
? ? ? echo "來自緩存池-> ";
? ? ? return $this->_farmMap[$type];// 返回緩存
? ? }
? ? switch ($type) {
? ? ? case 'chicken':
? ? ? ? return $this->_farmMap[$type] =? new Chicken();
? ? ? ? break;
? ? ? case 'pig':
? ? ? ? return $this->_farmMap[$type] =? new Pig();
? ? ? ? break;
? ? ? default:
? ? ? ? echo "該農場不支持生產該農物~ \n";
? ? ? ? break;
? ? }
? }
}
/**
* 動物接口
*/
interface AnimalInterface
{
? /**
? * 類型獲取
? *
? * @return string
? */
? public function getType();
}
/**
* 實體雞
*
*/
class Chicken implements AnimalInterface
{
? /**
? * 類別
? * @var string
? */
? private $_type = '';
? /**
? * 構造函數(shù)
? */
? public function __construct()
? {
? }
? /**
? * 類型獲取
? *
? * @return string
? */
? public function getType()
? {
? ? echo "這是只雞~ \n";
? }
}
/**
* 實體豬
*
*/
class Pig implements AnimalInterface
{
? /**
? * 類別
? * @var string
? */
? private $_type = '';
? /**
? * 構造函數(shù)
? */
? public function __construct()
? {
? }
? /**
? * 類型獲取
? *
? * @return string
? */
? public function getType()
? {
? ? echo "這是只豬~ \n";
? }
}
// 初始化一個工廠
$farm = new Farm();
//-----------初始化了一個農場-----------
// 成產一只雞
$farm->produce('chicken')->getType();
//這是只雞~
// 再生產一只雞
$farm->produce('chicken')->getType();
//來自緩存池-> 這是只雞~
// 成產一只豬
$farm->produce('pig')->getType();
//這是只豬~
// 再生產一只豬
$farm->produce('pig')->getType();
//來自緩存池-> 這是只豬~