version: "1.0.0" total_patterns: 23 description: Machine-readable index of Gang of Four design patterns for TypeScript/JavaScript categories: creational: - singleton - factory-method - abstract-factory - builder - prototype structural: - adapter - bridge - composite - decorator - facade - flyweight - proxy behavioral: - chain-of-responsibility - command - iterator - mediator - memento - observer - state - strategy - template-method - visitor - interpreter pattern_metadata: # Creational Patterns singleton: difficulty: 1 use_frequency: high detection_confidence: 0.85 typical_files: ["*Manager.ts", "*Service.ts", "*Client.ts", "*Config.ts"] primary_signals: ["private constructor", "static getInstance", "private static instance"] anti_patterns: ["hard to test", "global state", "tight coupling"] related: [dependency-injection] stack_native: react: "Context API" angular: "Injectable services" nestjs: "@Injectable() decorator" factory-method: difficulty: 2 use_frequency: high detection_confidence: 0.75 typical_files: ["*Factory.ts", "*Creator.ts", "*Provider.ts"] primary_signals: ["create* method", "returns interface/abstract class", "subclass decides instantiation"] anti_patterns: ["simple factory confusion", "too many parameters"] related: [abstract-factory, builder] abstract-factory: difficulty: 3 use_frequency: medium detection_confidence: 0.70 typical_files: ["*Factory.ts", "*AbstractFactory.ts"] primary_signals: ["multiple create* methods", "family of related objects", "interface for factory"] anti_patterns: ["complexity overhead", "rigid product families"] related: [factory-method, prototype] builder: difficulty: 2 use_frequency: high detection_confidence: 0.80 typical_files: ["*Builder.ts"] primary_signals: ["fluent interface", "method chaining", "build() method", "step-by-step construction"] anti_patterns: ["incomplete builders", "mutable builders"] related: [factory-method] common_use_cases: ["query builders", "request builders", "complex configuration"] prototype: difficulty: 2 use_frequency: low detection_confidence: 0.65 typical_files: ["*Prototype.ts"] primary_signals: ["clone() method", "deep copy", "Object.create()"] anti_patterns: ["shallow vs deep copy confusion", "circular references"] related: [factory-method] # Structural Patterns adapter: difficulty: 2 use_frequency: high detection_confidence: 0.75 typical_files: ["*Adapter.ts", "*Wrapper.ts"] primary_signals: ["wraps incompatible interface", "delegates to adaptee", "converts interface"] anti_patterns: ["two-way adapters", "adapter chains"] related: [bridge, decorator, proxy] common_use_cases: ["third-party library integration", "legacy code integration"] bridge: difficulty: 3 use_frequency: low detection_confidence: 0.60 typical_files: ["*Bridge.ts", "*Abstraction.ts", "*Implementation.ts"] primary_signals: ["abstraction has implementation reference", "two hierarchies", "runtime binding"] anti_patterns: ["over-engineering simple scenarios"] related: [adapter, strategy] composite: difficulty: 2 use_frequency: medium detection_confidence: 0.75 typical_files: ["*Component.ts", "*Composite.ts", "*Leaf.ts"] primary_signals: ["tree structure", "uniform interface", "recursive composition", "children collection"] anti_patterns: ["incorrect child management", "violating uniformity"] related: [decorator, iterator] common_use_cases: ["UI component trees", "file systems", "organization structures"] decorator: difficulty: 2 use_frequency: high detection_confidence: 0.70 typical_files: ["*Decorator.ts", "*Wrapper.ts"] primary_signals: ["wraps same interface", "adds behavior", "delegates to wrapped", "stackable"] anti_patterns: ["decorator explosion", "order dependency"] related: [adapter, composite, proxy] stack_native: react: "Higher-Order Components (HOC)" angular: "Directives" nestjs: "Interceptors" typescript: "Decorators (@)" facade: difficulty: 1 use_frequency: high detection_confidence: 0.80 typical_files: ["*Facade.ts", "*API.ts", "*Interface.ts"] primary_signals: ["simple interface to complex subsystem", "delegates to multiple classes"] anti_patterns: ["god facade", "leaky abstraction"] related: [adapter, mediator] common_use_cases: ["API clients", "library wrappers", "subsystem interfaces"] flyweight: difficulty: 3 use_frequency: low detection_confidence: 0.65 typical_files: ["*Flyweight.ts", "*Factory.ts"] primary_signals: ["shared state", "intrinsic vs extrinsic state", "large number of objects", "factory for sharing"] anti_patterns: ["premature optimization", "incorrect state separation"] related: [singleton, factory-method] proxy: difficulty: 2 use_frequency: medium detection_confidence: 0.75 typical_files: ["*Proxy.ts"] primary_signals: ["same interface as real subject", "controls access", "lazy initialization", "logging/caching"] anti_patterns: ["proxy chains", "performance overhead"] related: [adapter, decorator] common_use_cases: ["lazy loading", "access control", "caching", "logging"] stack_native: javascript: "Proxy object" # Behavioral Patterns chain-of-responsibility: difficulty: 2 use_frequency: medium detection_confidence: 0.70 typical_files: ["*Handler.ts", "*Middleware.ts"] primary_signals: ["handler interface", "next handler reference", "handles or passes", "linked list structure"] anti_patterns: ["unhandled requests", "broken chains"] related: [command, decorator] stack_native: express: "Middleware chain (app.use)" nestjs: "Guards, Interceptors, Pipes" command: difficulty: 2 use_frequency: medium detection_confidence: 0.75 typical_files: ["*Command.ts", "*Action.ts"] primary_signals: ["execute() method", "encapsulates request", "receiver reference", "undo/redo support"] anti_patterns: ["command explosion", "complex commands"] related: [memento, chain-of-responsibility] stack_native: redux: "Action creators" vuex: "Mutations" iterator: difficulty: 2 use_frequency: medium detection_confidence: 0.80 typical_files: ["*Iterator.ts"] primary_signals: ["next() method", "hasNext()/done", "current element access", "sequential traversal"] anti_patterns: ["modification during iteration"] related: [composite, visitor] stack_native: javascript: "Iterators and generators (Symbol.iterator)" typescript: "Iterable interface" mediator: difficulty: 3 use_frequency: medium detection_confidence: 0.65 typical_files: ["*Mediator.ts", "*Controller.ts"] primary_signals: ["centralized communication", "colleagues reference mediator", "loose coupling"] anti_patterns: ["god mediator", "tight coupling to mediator"] related: [facade, observer] stack_native: react: "Context API" angular: "Services with dependency injection" memento: difficulty: 3 use_frequency: low detection_confidence: 0.60 typical_files: ["*Memento.ts", "*Snapshot.ts", "*Caretaker.ts"] primary_signals: ["save state", "restore state", "encapsulated snapshot", "caretaker manages history"] anti_patterns: ["large state snapshots", "exposing internals"] related: [command] common_use_cases: ["undo/redo", "transaction rollback", "state history"] observer: difficulty: 2 use_frequency: very-high detection_confidence: 0.85 typical_files: ["*Observer.ts", "*Subject.ts", "*Publisher.ts", "*Subscriber.ts"] primary_signals: ["subscribe/unsubscribe", "notify/emit", "observers list", "one-to-many dependency"] anti_patterns: ["memory leaks", "notification storms", "observer order dependency"] related: [mediator, singleton] stack_native: javascript: "EventEmitter, EventTarget" react: "useState, useEffect, Context" angular: "RxJS Observables" rxjs: "Subject, BehaviorSubject, ReplaySubject" vue: "ref(), reactive(), watch()" state: difficulty: 2 use_frequency: medium detection_confidence: 0.70 typical_files: ["*State.ts", "*Context.ts"] primary_signals: ["state interface", "context holds state", "state transitions", "behavior varies by state"] anti_patterns: ["state explosion", "complex transitions"] related: [strategy, flyweight] stack_native: react: "useState, useReducer" redux: "Reducers" xstate: "State machines" strategy: difficulty: 1 use_frequency: high detection_confidence: 0.80 typical_files: ["*Strategy.ts", "*Policy.ts"] primary_signals: ["strategy interface", "context has strategy reference", "interchangeable algorithms"] anti_patterns: ["strategy explosion", "client awareness of strategies"] related: [state, bridge, template-method] stack_native: react: "Custom hooks" vue: "Composables" template-method: difficulty: 2 use_frequency: medium detection_confidence: 0.75 typical_files: ["*Template.ts", "*Abstract*.ts"] primary_signals: ["abstract class", "template method", "primitive operations", "hook methods"] anti_patterns: ["too many hooks", "subclass override complexity"] related: [strategy, factory-method] visitor: difficulty: 4 use_frequency: low detection_confidence: 0.60 typical_files: ["*Visitor.ts"] primary_signals: ["visit* methods", "double dispatch", "element accepts visitor", "operations on object structure"] anti_patterns: ["adding new element types", "circular dependencies"] related: [composite, iterator] interpreter: difficulty: 4 use_frequency: very-low detection_confidence: 0.55 typical_files: ["*Interpreter.ts", "*Expression.ts"] primary_signals: ["grammar rules", "interpret() method", "abstract syntax tree", "terminal/non-terminal expressions"] anti_patterns: ["complex grammars", "performance issues"] related: [composite, visitor] common_use_cases: ["DSLs", "query languages", "expression evaluators"] # Detection difficulty levels difficulty_levels: 1: "Easy - Clear structural markers and naming conventions" 2: "Medium - Requires pattern knowledge to distinguish from similar patterns" 3: "Hard - Subtle structural differences, context-dependent" 4: "Very Hard - Requires deep analysis of intent and relationships" # Usage frequency in modern codebases frequency_levels: very-high: "Ubiquitous in modern frameworks" high: "Common in most projects" medium: "Occasional use, specific scenarios" low: "Rare, specialized use cases" very-low: "Academic or niche applications" # Confidence score interpretation confidence_interpretation: 0.85-1.0: "High confidence - Multiple strong signals, unlikely false positive" 0.70-0.84: "Medium-high - Clear signals, some ambiguity possible" 0.55-0.69: "Medium - Requires manual validation" 0.40-0.54: "Low - Weak signals, high false positive risk" 0.0-0.39: "Very low - Naming convention only, not reliable"