/**
* 享元模式
* 共享子系统
* 抽象子系统实现接口
* 根据key储存对应的子系统实例
*/
/**
* Interface ServiceIO
* 共享子系统抽象接口
*/
interface ServiceIO {
public function GetServiceName();
}
/**
* Class WebService
* 子系统 实例
*/
class WebService implements ServiceIO {
private $_name;
function __construct($str)
{
$this->_name = $str;
}
public function GetServiceName()
{
echo 'WEB-API :'.$this->_name.PHP_EOL;
// TODO: Implement serviceName() method.
}
}
/**
* Class Enjoy
* 享元池类
*/
class Enjoy
{
protected static $_enjoyPool;
function __construct()
{
if (!isset($this->_enjoyPool)){
self::$_enjoyPool = [];
}
}
public function GetPool ($serviceName) {
if (!isset(self::$_enjoyPool[$serviceName])) {
$fw = new WebService($serviceName);
self::$_enjoyPool[$serviceName] = $fw;
return $fw;
}else{
// 已经存在直接返回
echo "已存在".$serviceName.PHP_EOL;
return self::$_enjoyPool[$serviceName];
}
}
}
$obj = new Enjoy();
$obj1=$obj->GetPool('service1'); // 从享元池里获取对象,如果没有则创建返回
$obj2=$obj->GetPool('service2');
$obj1->GetServiceName(); //WEB-API :service1 // 对应的key取出的对象
$obj2->GetServiceName(); //WEB-API :service2