轉(zhuǎn)載請(qǐng)注明作者和出處:http://www.reibang.com/p/33098b73772e(http://www.reibang.com/p/33098b73772e)
運(yùn)行平臺(tái): Windows
php版本: php7.0
作者簡介: 一個(gè)本該成為游戲職業(yè)選手卻被編程耽誤的程序員
享元模式,就是把對(duì)象放到某個(gè)地方存放著,想要的時(shí)候直接拿出來就行碌补,存貨的意思
例如我們?cè)谕嬗螒蝮恚?jīng)常弄出來很多士兵嘱蛋,我們不可能針對(duì)每個(gè)士兵去創(chuàng)造新的對(duì)象蘑辑,這時(shí)候我們只需要從享元池拿出來就行条获,經(jīng)常配合工廠模式一起使用合搅;
角色
- 享元工廠角色(FWFactory):創(chuàng)建并管理BlogModel對(duì)象牌柄。
- 所有具體享元父接口角色(BolgModel):接受并作用與外部狀態(tài)畸悬。
- 具體享元角色(JobsBlog):具體變化點(diǎn),為內(nèi)部對(duì)象增加儲(chǔ)存空間珊佣。
<?php
//抽象兵工廠類
abstract Class Arsenal{
abstract function Create();
}
//具體戰(zhàn)士類
Class Warrior extends Arsenal
{
function Create()
{
echo "戰(zhàn)士:保家衛(wèi)國蹋宦!沖啊<br/>";
}
}
// 具體騎士類
Class Knight extends Arsenal
{
function Create()
{
echo "騎士:沖散敵軍陣形<br/>";
}
}
// 享元類
Class Flyweight{
// 定義享元池
private $flyweights = array();
function getObjClass($name){
if(isset($this->flyweights[$name]))
{
echo "*************從享元池里取出************<br/>";
return $this->flyweights[$name];
}
else{
echo "*************新建對(duì)象并存入享元池************<br/>";
$ClassName = new $name();
$this->flyweights[$name] = $ClassName;
return $this->flyweights[$name];
}
}
}
$obj = new Flyweight();
// 第1個(gè)戰(zhàn)士
$War1 = $obj->getObjClass("Warrior");
$War1->Create();
// 第2個(gè)戰(zhàn)士
$War2 = $obj->getObjClass("Warrior");
$War2->Create();
// 第3個(gè)戰(zhàn)士
$War3 = $obj->getObjClass("Warrior");
$War3->Create();
// 第1個(gè)騎兵
$kni1 = $obj->getObjClass("Knight");
$kni1->Create();
// 第2個(gè)騎兵
$kni2 = $obj->getObjClass("Knight");
$kni2->Create();
參考資料
- [1] PHP設(shè)計(jì)模式--享元模式(https://blog.csdn.net/xhanguomzhu/article/details/79986325)》