您的位置:首页 > 其它

享元模式 的另外一个例证

2015-11-27 14:06 176 查看
<?php
// 抽象享元角色
abstract class Flyweight
{
abstract public function operation($state);
}

// 具体享元角色
class ConcreteFlyweight extends Flyweight
{
private $_intrinsicState = null;
public function __construct($state)
{
echo $state;
$this->_intrinsicState = $state;
}
public function operation($state)
{
echo $state;
}
}

// 不共享的具体享元,客户端直接调用
class UnsharedConcreteFlyweight extends Flyweight
{
private $_intrinsicState = null;
public function __construct($state)
{
echo $state;
$this->_intrinsicState = $state;
}
public function operation($state)
{
echo $state;
}
}

// 享元工厂角色
class FlyweightFactory
{
private $_flyweights;
public function __construct()
{
$this->_flyweights = array();
}
public function getFlyweigth($state)
{
if (isset($this->_flyweights[$state]))
{
return $this->_flyweights[$state];
}
else
{
return $this->_flyweights[$state] = new ConcreteFlyweight($state);
}
}
}

// client
$flyweightFactory = new FlyweightFactory(); //新建一个享元工厂角色
$flyweight = $flyweightFactory->getFlyweigth('state A');
$flyweight->operation('other state A');

$flyweight = $flyweightFactory->getFlyweigth('state B');
$flyweight->operation('other state B');

// 不共享的对象,单独调用
$uflyweight = new UnsharedConcreteFlyweight('state A');
$uflyweight->operation('other state A');
?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: