享元模式 的另外一个例证

<?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');
?>
原文地址:https://www.cnblogs.com/jiufen/p/5000495.html