gof-design-patterns

GoF Design Patterns Refactoring Detection

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "gof-design-patterns" with this command: npx skills add emvnuel/skill.md/emvnuel-skill-md-gof-design-patterns

GoF Design Patterns Refactoring Detection

Identify opportunities to apply Gang of Four (GoF) Design Patterns in Jakarta EE and MicroProfile applications.

Creational Patterns

Factory Method

Detect: if/switch with new based on type/condition

Refactor: CDI Instance<T>

  • @Named qualifiers

Cookbook: factory-method.md

Abstract Factory

Detect: Creating families of related objects with scattered logic

Refactor: CDI qualifiers for factory interface implementations

Cookbook: abstract-factory.md

Builder

Detect: Constructors with 4+ parameters, telescoping constructors, many setters in sequence

Refactor: Fluent builder with build() method, immutable objects

Cookbook: builder.md

Singleton

Detect: Manual getInstance() with double-checked locking

Refactor: @ApplicationScoped CDI bean

Cookbook: singleton.md

Prototype

Detect: Expensive object creation, need to copy/clone objects

Refactor: Cloneable interface + prototype registry

Cookbook: prototype.md

Structural Patterns

Adapter

Detect: Interface mismatch with external/legacy APIs

Refactor: CDI bean wrapping legacy system with target interface

Cookbook: adapter.md

Bridge

Detect: Abstraction and implementation should vary independently

Refactor: Separate hierarchy for implementors, inject via CDI

Cookbook: bridge.md

Composite

Detect: Tree/hierarchy structures (menus, org charts, file systems)

Refactor: Recursive interface, JPA @OneToMany self-reference

Cookbook: composite.md

Decorator

Detect: Inheritance explosion, cross-cutting concerns mixed in business logic

Refactor: CDI @Decorator

  • @Delegate , @Interceptor for AOP

Cookbook: decorator.md

Facade

Detect: Resource/controller calling multiple services directly

Refactor: @ApplicationScoped facade service orchestrating subsystems

Cookbook: facade.md

Flyweight

Detect: Many similar objects causing high memory usage

Refactor: Shared object cache, separate intrinsic/extrinsic state

Cookbook: flyweight.md

Proxy

Detect: Manual lazy loading, scattered access control checks

Refactor: CDI proxies (automatic), @RolesAllowed , MicroProfile REST Client

Cookbook: proxy.md

Behavioral Patterns

Chain of Responsibility

Detect: Sequential handler processing with hardcoded chain

Refactor: CDI Instance<T>

  • ordering, JAX-RS filters

Cookbook: chain-of-responsibility.md

Command

Detect: Operations needing undo/redo, queuing, or logging

Refactor: Command objects with execute() /undo()

  • executor

Cookbook: command.md

Interpreter

Detect: DSL/grammar parsing, configurable business rules

Refactor: Expression tree with interpret() method

Cookbook: interpreter.md

Iterator

Detect: Custom traversal needed, lazy loading from database

Refactor: Custom Iterator<T> for paginated queries

Cookbook: iterator.md

Mediator

Detect: Complex inter-object communication, many direct dependencies

Refactor: CDI Events (Event<T>

  • @Observes ) or mediator service

Cookbook: mediator.md

Memento

Detect: Need undo/redo, state snapshots, version history

Refactor: Memento objects + caretaker for history

Cookbook: memento.md

Observer

Detect: Direct method calls to notify multiple dependents

Refactor: CDI Event<T>

  • @Observes / @ObservesAsync

Cookbook: observer.md

State

Detect: Complex conditionals based on object state (if status == X )

Refactor: State interface with per-state implementations

Cookbook: state.md

Strategy

Detect: switch /if-else selecting between algorithms

Refactor: CDI Instance<T>

  • strategy selection by qualifier/type

Cookbook: strategy.md

Template Method

Detect: Duplicate algorithm structure with varying steps

Refactor: Abstract class with final template + abstract hooks

Cookbook: template-method.md

Visitor

Detect: Operations across unrelated element types

Refactor: Visitor interface + accept(visitor) in elements

Cookbook: visitor.md

Quick Reference Table

Pattern Detection Signal Jakarta EE/MP Integration

Factory Method if/switch with new based on type CDI Instance<T>

  • qualifiers

Abstract Factory Creating families of related objects CDI qualifiers for factory types

Builder Constructors with 4+ parameters Immutable objects + fluent API

Singleton Manual getInstance() pattern @ApplicationScoped

Prototype Expensive object creation, need copies Cloneable

  • prototype registry

Adapter Interface mismatch with external APIs CDI bean wrapping legacy

Bridge Abstraction/implementation should vary CDI for implementor injection

Composite Tree/hierarchy structures Recursive interface + JPA

Decorator Inheritance for extending behavior @Decorator , @Interceptor

Facade Multiple service calls in controller @ApplicationScoped facade

Flyweight Many similar objects, high memory Shared caches, object pools

Proxy Manual lazy loading / access control CDI proxies, @RolesAllowed

Chain of Responsibility Sequential handler processing CDI Instance<T>

  • ordering

Command Operations needing undo/queue/log Command objects + executor

Interpreter DSL/grammar parsing, rule engines Expression trees + parser

Iterator Custom traversal, lazy DB loading Iterator<T> , paginated queries

Mediator Complex inter-object communication CDI Events or mediator service

Memento Undo/redo, state snapshots Memento objects + caretaker

Observer Direct calls to multiple dependents CDI Event<T>

  • @Observes

State Complex state-based conditionals State interface + transitions

Strategy switch /if-else selecting algorithm CDI Instance<T>

  • iteration

Template Method Duplicate algorithm with varying steps Abstract class with hooks

Visitor Operations across unrelated elements Visitor interface + accept

MicroProfile-Specific Patterns

MP Feature Pattern Applied Example

Health Check Factory + Strategy @Liveness , @Readiness implementing HealthCheck

Fault Tolerance Decorator/Proxy @Retry , @Timeout , @Fallback annotations

Config Strategy @ConfigProperty to select behavior at runtime

REST Client Proxy Interface-based remote service invocation

Metrics Decorator @Counted , @Timed interceptors

When NOT to Apply Patterns

  • Simple cases: Don't add Factory for 2-3 types that rarely change

  • YAGNI: Don't add patterns for "future flexibility"

  • Performance-critical paths: Pattern overhead may matter

  • Clear and readable code: Patterns shouldn't obscure intent

  • Team familiarity: Consider team's pattern knowledge

Cookbook Index

All 23 GoF patterns with Jakarta EE implementations:

Creational (5): Factory Method · Abstract Factory · Builder · Singleton · Prototype

Structural (7): Adapter · Bridge · Composite · Decorator · Facade · Flyweight · Proxy

Behavioral (11): Chain of Responsibility · Command · Interpreter · Iterator · Mediator · Memento · Observer · State · Strategy · Template Method · Visitor

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

quarkus-panache-smells

No summary provided by upstream source.

Repository SourceNeeds Review
General

lombok-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

mapstruct-patterns

No summary provided by upstream source.

Repository SourceNeeds Review
General

rest-api-design

No summary provided by upstream source.

Repository SourceNeeds Review