PHP 享元模式

<?php
/**
 * 享元模式
 * 共享子系统
 * 抽象子系统实现接口
 * 根据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

猜你喜欢

转载自my.oschina.net/u/3529405/blog/1823864