<?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'); ?>