Awesome-claude-code create-strategy

Generates Strategy pattern for PHP 8.4. Creates interchangeable algorithm families with context class, strategy interface, and concrete implementations. 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-strategy" ~/.claude/skills/dykyi-roman-awesome-claude-code-create-strategy && rm -rf "$T"
manifest: skills/create-strategy/SKILL.md
source content

Strategy Pattern Generator

Creates Strategy pattern infrastructure for interchangeable algorithm families.

When to Use

ScenarioExample
Multiple algorithmsPricing, tax, shipping calculation
Runtime selectionPayment processing based on amount
Avoiding conditionalsReplace switch/if-else chains
Algorithm familiesSorting, compression, encryption

Component Characteristics

StrategyInterface

  • Defines algorithm contract
  • Single method for execution
  • Supports method for selection

Strategy Resolver

  • Resolves appropriate strategy
  • Based on input criteria
  • Falls back to default

Concrete Strategies

  • Implement specific algorithms
  • Interchangeable via interface
  • Encapsulate algorithm details

Generation Process

Step 1: Generate Strategy Interface

Path:

src/Domain/{BoundedContext}/Strategy/

  1. {Name}StrategyInterface.php
    — Algorithm contract with supports method

Step 2: Generate Concrete Strategies

Path:

src/Domain/{BoundedContext}/Strategy/

  1. {Variant1}{Name}Strategy.php
    — First algorithm implementation
  2. {Variant2}{Name}Strategy.php
    — Second algorithm implementation
  3. Default{Name}Strategy.php
    — Fallback implementation

Step 3: Generate Resolver

Path:

src/Domain/{BoundedContext}/Strategy/

  1. {Name}StrategyResolver.php
    — Strategy selection logic

Step 4: Generate Service (Optional)

Path:

src/Domain/{BoundedContext}/Strategy/

  1. {Name}Service.php
    — Facade using resolver

Step 5: Generate Tests

  1. {Variant}{Name}StrategyTest.php
    — Individual strategy tests
  2. {Name}StrategyResolverTest.php
    — Resolver tests

File Placement

ComponentPath
Strategy Interface
src/Domain/{BoundedContext}/Strategy/
Concrete Strategies
src/Domain/{BoundedContext}/Strategy/
Resolver
src/Domain/{BoundedContext}/Strategy/
Unit Tests
tests/Unit/Domain/{BoundedContext}/Strategy/

Naming Conventions

ComponentPatternExample
Interface
{Name}StrategyInterface
PricingStrategyInterface
Concrete
{Variant}{Name}Strategy
BulkPricingStrategy
Context
{Name}Context
PricingContext
Resolver
{Name}StrategyResolver
PricingStrategyResolver
Test
{ClassName}Test
BulkPricingStrategyTest

Quick Template Reference

Strategy Interface

interface {Name}StrategyInterface
{
    public function execute({InputType} $input): {OutputType};
    public function supports({InputType} $input): bool;
}

Concrete Strategy

final readonly class {Variant}{Name}Strategy implements {Name}StrategyInterface
{
    public function execute({InputType} $input): {OutputType}
    {
        {algorithmImplementation}
    }

    public function supports({InputType} $input): bool
    {
        return {condition};
    }
}

Strategy Resolver

final readonly class {Name}StrategyResolver
{
    public function __construct(
        private iterable $strategies,
        private {Name}StrategyInterface $defaultStrategy
    ) {}

    public function resolve({InputType} $input): {Name}StrategyInterface
    {
        foreach ($this->strategies as $strategy) {
            if ($strategy->supports($input)) {
                return $strategy;
            }
        }
        return $this->defaultStrategy;
    }
}

Usage Example

// Configure strategies
$resolver = new PricingStrategyResolver(
    strategies: [
        new BulkPricingStrategy(),      // 15% off for 100+ items
        new PromotionalPricingStrategy(), // Active promotion discount
        new VipPricingStrategy(),        // VIP customer discount
    ],
    defaultStrategy: new RegularPricingStrategy()
);

// Use in service
$strategy = $resolver->resolve($pricingContext);
$price = $strategy->calculatePrice($pricingContext);

Common Strategy Examples

DomainStrategies
PricingRegular, Bulk, Promotional, VIP
ShippingStandard, Express, Free, International
TaxUS, EU, Exempt, Zero-rated
PaymentCredit Card, PayPal, Bank Transfer
DiscountPercentage, Fixed, Buy-One-Get-One

Anti-patterns to Avoid

Anti-patternProblemSolution
Stateful StrategiesSide effectsMake strategies readonly
Fat ContextToo much couplingMinimal context interface
Missing ResolverManual strategy selectionUse resolver pattern
Over-engineeringSingle algorithmDon't use pattern
Leaky AbstractionStrategy-specific typesUse shared interfaces

References

For complete PHP templates and examples, see:

  • references/templates.md
    — Strategy Interface, Concrete Strategy, Resolver, Context templates
  • references/examples.md
    — Pricing, Shipping, Tax strategies and tests