Skip to content
Back to skills

Java Design Pattern

ASecurity

Detects GoF patterns in Java code or recommends the right pattern for a problem. Use when user asks to "what pattern is this", "detect design patterns", "suggest a pattern", "should I use factory", "which design pattern", or "recommend a pattern for".

  • 16 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 26, 2026
developmentgojavaspringsecurity

Works with

  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add ducpm2303/claude-java-plugins --skill java-design-pattern --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Java Design Pattern?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Java Design Pattern
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ducpm2303-java-design-pattern/badge)](https://www.skillsdirectory.com/skills/ducpm2303-java-design-pattern)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: Detects GoF patterns in Java code or recommends the right pattern for a problem. Use when user asks to "what pattern is this", "detect design patterns", "suggest a pattern", "should I use factory", "which design pattern", or "recommend a pattern for".
argument-hint: "[paste code to detect patterns, or describe your problem]"
---

Either detect which design patterns are used in the provided code, or recommend the right pattern for a described problem. Tailor all examples to the detected Java version (Java 8+).

## Mode A — Detect patterns in existing code
Scan the code for these common patterns and name them explicitly:

**Creational:**
- **Singleton** — private constructor + static instance (flag if not thread-safe without `volatile` or `enum`)
- **Factory Method** — static `create()` or `of()` returning an interface type
- **Builder** — inner static `Builder` class with fluent setters and `build()`
- **Abstract Factory** — factory that creates families of related objects

**Structural:**
- **Decorator** — wraps another object implementing the same interface to add behaviour
- **Proxy** — Spring `@Transactional`, `@Cacheable`, `@Async` are all proxies; flag manual proxies
- **Adapter** — converts one interface to another (often with `*Adapter` or `*Wrapper` class name)
- **Facade** — simplifies a complex subsystem; often a service that orchestrates multiple repos/clients
- **Composite** — tree structure where leaf and composite implement the same interface

**Behavioral:**
- **Strategy** — interface with multiple implementations selected at runtime
- **Observer** — Spring `ApplicationEvent` / `@EventListener` or manual listener list
- **Template Method** — abstract class with `final` algorithm method calling overridable steps
- **Command** — encapsulates a request as an object (common in undo/redo, queuing)
- **Chain of Responsibility** — Spring Security filter chain, Servlet filters
- **State** — object behaviour changes based on internal state enum/object

For each detected pattern: name it, show the key code that reveals it, explain how it's used here.

## Mode B — Recommend a pattern for a problem
When the user describes a problem, recommend the most appropriate pattern:

| Problem | Recommended Pattern |
|---|---|
| Need multiple algorithms interchangeable at runtime | Strategy |
| Object creation is complex, many optional fields | Builder |
| Need to add behaviour without modifying existing class | Decorator |
| Need to notify multiple objects when state changes | Observer |
| Complex subsystem needs a simple interface | Facade |
| Same operation on tree structures | Composite |
| Object has distinct lifecycle states | State |
| Need only one instance globally | Singleton (or Spring `@Component`) |

Show a minimal Java implementation for the recommended pattern, appropriate for the detected Java version:
- Java 8+: use functional interfaces (Strategy can be a lambda `Function<T,R>`)
- Java 17+: use sealed classes for State pattern
- Java 16+: use records for value objects in patterns

## Output format
**Mode A:** List each detected pattern with: name + location + explanation + any concerns (e.g., non-thread-safe Singleton)
**Mode B:** Recommend pattern + minimal before/after code + when to use vs alternatives

## Next Steps
- After identifying patterns → run `/java-solid` to check if patterns are applied correctly
- For implementation help → ask the `java-architect` agent for full design guidance

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.