mcpField
G
gof-patterns

gof-patterns

github.com/grndlvl開発1764 回インストール38 週間前に更新
リポジトリ

gof-patterns について

gof-patternsは、Gang of Fourのデザインパターンを扱う言語非依存のリファレンススキルです。パターンを選び、学び、実装する開発者向けに、分類表や選択ガイド、各言語に応用できる疑似コードを提供します。

主な機能

  1. 01生成・構造・振る舞いの各パターンを収録
  2. 02パターン選択ガイド
  3. 03各パターンの適用場面を説明
  4. 04複数言語に応用可能な疑似コード

活用シーン

  1. 01設計上の課題に合うパターンの選択
  2. 02リファクタリング時の構造改善の検討
  3. 03例をプロジェクトの言語に合わせて翻訳

MCP 対応

入力にはMCPとの関係について記載がありません。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/grndlvl/software-patterns --skill gof-patterns

インストール後、Claude Code で/gof-patternsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

pattern-selection.md
gof-behavioral/
chain-of-responsibility.md
command.md
interpreter.md
iterator.md
mediator.md
memento.md
observer.md
state.md
strategy.md
template-method.md
visitor.md
gof-creational/
abstract-factory.md
builder.md
factory-method.md
prototype.md
singleton.md
gof-structural/
adapter.md
bridge.md
composite.md
decorator.md
facade.md
flyweight.md
proxy.md

詳細

GoF デザインパターンリファレンス

Gang of Four のデザインパターンを網羅したリファレンスです。このスキルでは、あらゆるプログラミング言語に翻訳できる疑似コードの例とともに、言語に依存しないガイダンスを提供します。

このスキルが有効になるとき

このスキルは、次のような場合に自動的に有効になります。

  • デザインパターンについて質問する、または実装する必要がある
  • 設計上の問題に対して、どのパターンを選ぶべきか検討する
  • コードをリファクタリングし、構造の改善を検討する
  • アーキテクチャ、疎結合、拡張性について話し合う
  • 特定のパターン(ファクトリー、シングルトン、オブザーバー、デコレーターなど)に言及する

パターン早見表

生成パターン(オブジェクトの生成)
パターン意図使用する場面
Abstract Factory関連するオブジェクト群を生成するプラットフォームやテーマからの独立性が必要な場合
Builder複雑なオブジェクトを段階的に構築するオブジェクトに多数のオプション要素がある場合
Factory Methodどのクラスをインスタンス化するかをサブクラスに決定させる具体的な型を事前に把握できない場合
Prototype既存のオブジェクトを複製するオブジェクトの生成コストが高い場合
Singletonインスタンスが1つだけであることを保証する共有インスタンスを厳密に1つだけ必要とする場合
構造パターン(構成)
パターン意図使用する場面
Adapterインターフェースを期待されるインターフェースに変換する互換性のないインターフェースを統合する場合
Bridge抽象化と実装を分離する両者を独立して変更する必要がある場合
Composite個別の要素とグループを同じように扱うツリー構造がある場合
Decorator責務を動的に追加する柔軟な拡張が必要な場合
Facadeサブシステムに簡素化されたインターフェースを提供する複雑なサブシステムにシンプルな API が必要な場合
Flyweight共通の状態を効率的に共有する類似したオブジェクトを多数必要とする場合
Proxyオブジェクトへのアクセスを制御する遅延読み込み、アクセス制御、ログ記録が必要な場合
振る舞いパターン(通信)
パターン意図使用する場面
Chain of Responsibilityハンドラーの連鎖に沿ってリクエストを渡すハンドラーが複数あり、どのハンドラーが処理するか不明な場合
Commandリクエストをオブジェクトとしてカプセル化する操作の取り消し、キューイング、ログ記録が必要な場合
Interpreter文法を定義し、文を解釈する解析するシンプルな言語がある場合
Iterator内部構造を公開せずに順次アクセスするコレクションの走査が必要な場合
Mediator複雑な通信を一元化する多数のオブジェクトが複雑な方法で通信する場合
Mementoオブジェクトの状態を保存して復元する取り消しやスナップショット機能が必要な場合
Observer状態の変化を依存先に通知する1対多の依存関係がある場合
State状態の変化に応じて振る舞いを変えるオブジェクトの振る舞いが状態に依存する場合
Strategy交換可能なアルゴリズムをカプセル化する実行時にアルゴリズムを切り替える必要がある場合
Template Method骨組みを定義し、詳細をサブクラスに実装させるアルゴリズムの構造は固定で、各ステップは異なる場合
Visitorクラスを変更せずに操作を追加する安定した構造に多数の操作を追加する必要がある場合

選択ガイド

適切なパターンを選ぶ際は、パターン選択ガイドを参照してください。

このリファレンスの使い方

  1. パターンを選ぶ:まず、上記の判断ガイドまたは表を参照してください
  2. パターンを学ぶ:例を含むドキュメント全体を読んでください
  3. すぐに確認する:ひと目で確認できるよう、上記の表を活用してください
  4. 実装する:疑似コードに従い、使用する言語に合わせて調整してください

言語への翻訳に関する注意

このリファレンスの疑似コードでは、次の規則を使用しています。

  • 型定義には class
  • メソッド/関数には function
  • オブジェクトのメソッド呼び出しには ->
  • コメントには //
  • 型ヒントは name: Type の形式

使用する言語に合わせて翻訳してください。

  • PHP:class、function、->、//、docblock または PHP 8 以降の型ヒント
  • JavaScript/TypeScript:class、function/アロー関数、.、//、TS の型
  • Python:class、def、.、#、型ヒント
  • Java/C#:new、ジェネリクスを使用して直接対応させます

Gamma、Helm、Johnson、Vlissides(Gang of Four)による「Design Patterns: Elements of Reusable Object-Oriented Software」(1994年)の概念に基づいています。

コメント