characters as $char) { foreach ($this->fonts as $font) { $flyweight = $factory->get($char); $rendered = $flyweight->render($font); $this->assertSame(sprintf('Character %s with font %s', $char, $font), $rendered); } } } foreach ($this->fonts as $word) { $flyweight = $factory->get($word); $rendered = $flyweight->render('foobar'); $this->assertSame(sprintf('Word %s with font foobar', $word), $rendered); } // Flyweight pattern ensures that instances are shared // instead of having hundreds of thousands of individual objects // there must be one instance for every char that has been reused for displaying in different fonts $this->assertCount(count($this->characters) + count($this->fonts), $factory); } }