gof-patterns について
gof-patternsは、Gang of Fourのデザインパターンを扱う言語非依存のリファレンススキルです。パターンを選び、学び、実装する開発者向けに、分類表や選択ガイド、各言語に応用できる疑似コードを提供します。
主な機能
- 01生成・構造・振る舞いの各パターンを収録
- 02パターン選択ガイド
- 03各パターンの適用場面を説明
- 04複数言語に応用可能な疑似コード
活用シーン
- 01設計上の課題に合うパターンの選択
- 02リファクタリング時の構造改善の検討
- 03例をプロジェクトの言語に合わせて翻訳
MCP 対応
入力にはMCPとの関係について記載がありません。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ grndlvl/ software-patterns --skill gof-patternsインストール後、Claude Code で/gof-patternsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
pattern-selection.mdgof-behavioral/chain-of-responsibility.mdcommand.mdinterpreter.mditerator.mdmediator.mdmemento.mdobserver.mdstate.mdstrategy.mdtemplate-method.mdvisitor.mdgof-creational/abstract-factory.mdbuilder.mdfactory-method.mdprototype.mdsingleton.mdgof-structural/adapter.mdbridge.mdcomposite.mddecorator.mdfacade.mdflyweight.mdproxy.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 | クラスを変更せずに操作を追加する | 安定した構造に多数の操作を追加する必要がある場合 |
選択ガイド
適切なパターンを選ぶ際は、パターン選択ガイドを参照してください。
このリファレンスの使い方
- パターンを選ぶ:まず、上記の判断ガイドまたは表を参照してください
- パターンを学ぶ:例を含むドキュメント全体を読んでください
- すぐに確認する:ひと目で確認できるよう、上記の表を活用してください
- 実装する:疑似コードに従い、使用する言語に合わせて調整してください
言語への翻訳に関する注意
このリファレンスの疑似コードでは、次の規則を使用しています。
- 型定義には
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年)の概念に基づいています。
コメント
Markdown 対応