Help us improve
Share bugs, ideas, or general feedback.
From acc
Generates PHP 8.4 Strategy pattern with interface, concrete strategies, resolver, optional service, and unit tests for interchangeable algorithm families like pricing or sorting.
npx claudepluginhub dykyi-roman/awesome-claude-code --plugin accHow this skill is triggered — by the user, by Claude, or both
Slash command
/acc:create-strategyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates Strategy pattern infrastructure for interchangeable algorithm families.
Generates Template Method pattern for PHP 8.4: abstract algorithm skeleton with customizable steps, concrete implementations, hooks, optional value objects, and unit tests. For reusable algorithms with variants like data processing.
Implements Strategy pattern in Laravel: shared interface, multiple implementations, factory for runtime selection by key/context, bound via service provider.
Covers 26 Gang of Four design patterns with PHP 8.3+ implementations, UML diagrams, and practical use cases.
Share bugs, ideas, or general feedback.
Creates Strategy pattern infrastructure for interchangeable algorithm families.
| 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 |
Path: src/Domain/{BoundedContext}/Strategy/
{Name}StrategyInterface.php — Algorithm contract with supports methodPath: src/Domain/{BoundedContext}/Strategy/
{Variant1}{Name}Strategy.php — First algorithm implementation{Variant2}{Name}Strategy.php — Second algorithm implementationDefault{Name}Strategy.php — Fallback implementationPath: src/Domain/{BoundedContext}/Strategy/
{Name}StrategyResolver.php — Strategy selection logicPath: src/Domain/{BoundedContext}/Strategy/
{Name}Service.php — Facade using resolver{Variant}{Name}StrategyTest.php — Individual strategy tests{Name}StrategyResolverTest.php — Resolver tests| Component | Path |
|---|---|
| Strategy Interface | src/Domain/{BoundedContext}/Strategy/ |
| Concrete Strategies | src/Domain/{BoundedContext}/Strategy/ |
| Resolver | src/Domain/{BoundedContext}/Strategy/ |
| Unit Tests | tests/Unit/Domain/{BoundedContext}/Strategy/ |
| Component | Pattern | Example |
|---|---|---|
| Interface | {Name}StrategyInterface | PricingStrategyInterface |
| Concrete | {Variant}{Name}Strategy | BulkPricingStrategy |
| Context | {Name}Context | PricingContext |
| Resolver | {Name}StrategyResolver | PricingStrategyResolver |
| Test | {ClassName}Test | BulkPricingStrategyTest |
interface {Name}StrategyInterface
{
public function execute({InputType} $input): {OutputType};
public function supports({InputType} $input): bool;
}
final readonly class {Variant}{Name}Strategy implements {Name}StrategyInterface
{
public function execute({InputType} $input): {OutputType}
{
{algorithmImplementation}
}
public function supports({InputType} $input): bool
{
return {condition};
}
}
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;
}
}
// 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);
| 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-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 |
For complete PHP templates and examples, see:
references/templates.md — Strategy Interface, Concrete Strategy, Resolver, Context templatesreferences/examples.md — Pricing, Shipping, Tax strategies and tests