Awesome-claude-code create-flyweight

Generates Flyweight pattern for PHP 8.4. Optimizes memory via shared intrinsic state. Includes unit tests.

install
source · Clone the upstream repo
git clone https://github.com/dykyi-roman/awesome-claude-code
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/dykyi-roman/awesome-claude-code "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/create-flyweight" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-flyweight && rm -rf "$T"
manifest: skills/create-flyweight/SKILL.md
source content

Flyweight Pattern Generator

Creates Flyweight pattern infrastructure for memory optimization through object sharing.

When to Use

ScenarioExample
Large number of similar objectsIcons, glyphs, particles
Memory constraintsMobile apps, embedded systems
Immutable shared stateCurrency codes, tax rates
Performance optimizationReduce object creation overhead

Component Characteristics

Flyweight Interface

  • Defines operations
  • Accepts extrinsic state as parameters

ConcreteFlyweight

  • Stores intrinsic state (shared)
  • Immutable
  • Reusable across contexts

FlyweightFactory

  • Creates and manages flyweights
  • Returns existing or new flyweight
  • Ensures sharing

Generation Process

Step 1: Generate Flyweight Interface

Path:

src/Domain/{BoundedContext}/

  1. {Name}Interface.php
    — Operations contract

Step 2: Generate ConcreteFlyweight

Path:

src/Domain/{BoundedContext}/

  1. {Name}Flyweight.php
    — Shared object

Step 3: Generate FlyweightFactory

Path:

src/Domain/{BoundedContext}/Factory/
or
src/Infrastructure/

  1. {Name}FlyweightFactory.php
    — Manages flyweights

Step 4: Generate Tests

  1. {ClassName}Test.php
    — Flyweight behavior and sharing verification

File Placement

ComponentPath
Flyweight Interface
src/Domain/{BoundedContext}/
ConcreteFlyweight
src/Domain/{BoundedContext}/
FlyweightFactory
src/Domain/{BoundedContext}/Factory/
Unit Tests
tests/Unit/Domain/{BoundedContext}/

Naming Conventions

ComponentPatternExample
Flyweight Interface
{Name}Interface
CurrencyInterface
ConcreteFlyweight
{Name}Flyweight
CurrencyFlyweight
FlyweightFactory
{Name}FlyweightFactory
CurrencyFlyweightFactory
Test
{ClassName}Test
CurrencyFlyweightTest

Quick Template Reference

Flyweight

final readonly class {Name}Flyweight implements {Name}Interface
{
    public function __construct(
        private string $intrinsicState
    ) {}

    public function {operation}(string $extrinsicState): {returnType}
    {
        return {combine intrinsic and extrinsic state};
    }
}

FlyweightFactory

final class {Name}FlyweightFactory
{
    private array $flyweights = [];

    public function getFlyweight(string $key): {Name}Interface
    {
        if (!isset($this->flyweights[$key])) {
            $this->flyweights[$key] = new {Name}Flyweight($key);
        }

        return $this->flyweights[$key];
    }

    public function getCount(): int
    {
        return count($this->flyweights);
    }
}

Usage Example

$factory = new CurrencyFlyweightFactory();

// Same object returned
$usd1 = $factory->getFlyweight('USD');
$usd2 = $factory->getFlyweight('USD');

assert($usd1 === $usd2); // true

// Format with extrinsic state
$usd1->format(100.50); // "$100.50"

Common Flyweights

FlyweightPurpose
CurrencyFlyweightCurrency codes and symbols
IconFlyweightUI icons
TaxRuleFlyweightTax rates by region
CharacterFlyweightText rendering glyphs
ColorFlyweightColor palettes

Anti-patterns to Avoid

Anti-patternProblemSolution
Mutable FlyweightState changes affect all usersMake flyweights immutable
No FactoryManual object managementUse flyweight factory
Large Intrinsic StateMemory not optimizedKeep intrinsic state minimal
Extrinsic in FlyweightNot reusablePass extrinsic via parameters
Premature OptimizationComplexity without benefitProfile first

References

For complete PHP templates and examples, see:

  • references/templates.md
    — Flyweight, factory templates
  • references/examples.md
    — Currency, icon, tax rule flyweights with unit tests