'; } } class ClassB { public function run() { echo 'ClassB run
'; } } class ClassC { public function run() { echo 'ClassC run
'; } } /** * Factory for small classes */ class FlyweightFactory { private $allObj = []; public function getObj($key) { if (!isset($this->allObj[$key])) { switch ($key) { case 'A': $this->allObj[$key] = new ClassA(); break; case 'B': $this->allObj[$key] = new ClassB(); break; case 'C': $this->allObj[$key] = new ClassC(); break; } } return $this->allObj[$key]; } } /** * demo */ $factory = new FlyweightFactory(); $keys = ['A', 'B', 'C']; foreach ($keys as $key) { $obj = $factory->getObj($key); $obj->run(); } /** ClassA run ClassB run ClassC run */ # end of file