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.mdsource content
Strategy Pattern Generator
Creates Strategy pattern infrastructure for interchangeable algorithm families.
When to Use
| Scenario | Example |
|---|---|
| Multiple algorithms | Pricing, tax, shipping calculation |
| Runtime selection | Payment processing based on amount |
| Avoiding conditionals | Replace switch/if-else chains |
| Algorithm families | Sorting, 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/
— Algorithm contract with supports method{Name}StrategyInterface.php
Step 2: Generate Concrete Strategies
Path:
src/Domain/{BoundedContext}/Strategy/
— First algorithm implementation{Variant1}{Name}Strategy.php
— Second algorithm implementation{Variant2}{Name}Strategy.php
— Fallback implementationDefault{Name}Strategy.php
Step 3: Generate Resolver
Path:
src/Domain/{BoundedContext}/Strategy/
— Strategy selection logic{Name}StrategyResolver.php
Step 4: Generate Service (Optional)
Path:
src/Domain/{BoundedContext}/Strategy/
— Facade using resolver{Name}Service.php
Step 5: Generate Tests
— Individual strategy tests{Variant}{Name}StrategyTest.php
— Resolver tests{Name}StrategyResolverTest.php
File Placement
| Component | Path |
|---|---|
| Strategy Interface | |
| Concrete Strategies | |
| Resolver | |
| Unit Tests | |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Interface | | |
| Concrete | | |
| Context | | |
| Resolver | | |
| Test | | |
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
| Domain | Strategies |
|---|---|
| Pricing | Regular, Bulk, Promotional, VIP |
| Shipping | Standard, Express, Free, International |
| Tax | US, EU, Exempt, Zero-rated |
| Payment | Credit Card, PayPal, Bank Transfer |
| Discount | Percentage, Fixed, Buy-One-Get-One |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Stateful Strategies | Side effects | Make strategies readonly |
| Fat Context | Too much coupling | Minimal context interface |
| Missing Resolver | Manual strategy selection | Use resolver pattern |
| Over-engineering | Single algorithm | Don't use pattern |
| Leaky Abstraction | Strategy-specific types | Use shared interfaces |
References
For complete PHP templates and examples, see:
— Strategy Interface, Concrete Strategy, Resolver, Context templatesreferences/templates.md
— Pricing, Shipping, Tax strategies and testsreferences/examples.md