RendererFactory.php 898 B

1234567891011121314151617181920212223242526272829303132
  1. <?php
  2. namespace App\Services\Template\Renderers;
  3. use App\Services\Template\Contracts\RendererInterface;
  4. // ================== 渲染器工厂 ==================
  5. class RendererFactory
  6. {
  7. private static array $renderers = [];
  8. public static function create(string $format): RendererInterface
  9. {
  10. if (!isset(self::$renderers[$format])) {
  11. self::$renderers[$format] = match ($format) {
  12. 'json' => new JsonRenderer(),
  13. 'html' => new HtmlRenderer(),
  14. 'markdown' => new MarkdownRenderer(),
  15. 'text' => new TextRenderer(),
  16. default => throw new \InvalidArgumentException("Unsupported format: $format")
  17. };
  18. }
  19. return self::$renderers[$format];
  20. }
  21. public static function getSupportedFormats(): array
  22. {
  23. return ['json', 'html', 'markdown', 'text'];
  24. }
  25. }