mcpField
D
design-patterns

design-patterns

github.com/krzysztofsurdy開発3661 回インストール1 週間前に更新
リポジトリ

design-patterns について

開発者向けのデザインパターン参照スキルです。生成・構造・振る舞いの目的別に整理し、複数言語での実装、UML の指針、実用例を掲載しています。パターンの選び方と適用時の原則も扱います。

主な機能

  1. 01目的別のパターン分類
  2. 0226 種類のデザインパターン
  3. 03複数言語での実装例
  4. 04UML の指針と実用例
  5. 05選択方法と適用の原則

活用シーン

  1. 01設計課題に合うパターンの選定
  2. 02用途に応じたパターンの比較
  3. 03実装例や UML の確認
  4. 04複雑さに見合うパターンかの検討

インストール

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

$npx skills add https://github.com/krzysztofsurdy/code-virtuoso --skill design-patterns

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

同梱ファイル

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

references/
abstract-factory.md
adapter.md
bridge.md
builder.md
chain-of-responsibility.md
command.md
composite.md
decorator.md
facade.md
factory-method.md
flyweight.md
interpreter.md
iterator.md
mediator.md
memento.md
null-object.md
object-pool.md
observer.md
private-class-data.md
prototype.md
proxy.md
singleton.md
state.md
strategy.md
template-method.md
visitor.md

詳細

デザインパターン

意図(生成、構造、振る舞い)別に分類された26種類のデザインパターンのリファレンスです。PHP、Python、Java、C++ などでの実装、UML のガイダンス、実用的なユースケースを紹介します。

パターン一覧

生成パターン
  • Abstract Factory - 具体的なクラスを指定せずに、関連するオブジェクトのファミリーを生成します → リファレンス
  • Builder - 段階的なプロセスを通じて複雑なオブジェクトを組み立てます → リファレンス
  • Factory Method - オブジェクト生成のインターフェースを定義し、具体的な型をサブクラスに決定させます → リファレンス
  • Prototype - 具体的なクラスに依存せず、既存のオブジェクトを複製します → リファレンス
  • Singleton - クラスのインスタンスが厳密に1つだけであることを保証します → リファレンス
  • Object Pool - 生成コストの高いオブジェクトを再利用できるようにします → リファレンス
構造パターン
  • Adapter - クライアントが期待する別のインターフェースに変換します → リファレンス
  • Bridge - 抽象化と実装を分離し、両者を独立して発展させられるようにします → リファレンス
  • Composite - オブジェクトをツリー構造に配置し、統一的に扱えるようにします → リファレンス
  • Decorator - ラッピングを通じて、オブジェクトに新たな振る舞いを動的に重ねます → リファレンス
  • Facade - 複雑なサブシステムにシンプルなインターフェースを提供します → リファレンス
  • Flyweight - 多数のオブジェクト間で共通の状態を共有し、メモリ使用量を抑えます → リファレンス
  • Proxy - 代理オブジェクトを介して、オブジェクトへのアクセスを管理します → リファレンス
  • Private Class Data - クラス属性へのアクセスを制限します → リファレンス
振る舞いパターン
  • Chain of Responsibility - ハンドラーのチェーンを通じてリクエストをルーティングします → リファレンス
  • Command - リクエストを独立したオブジェクトとして表現します → リファレンス
  • Interpreter - 文法表現と、それを解釈するインタープリターを定義します → リファレンス
  • Iterator - 内部構造を明かさずに要素を順にたどります → リファレンス
  • Mediator - 中央の調整役を通じて依存関係を整理します → リファレンス
  • Memento - カプセル化を損なわずに、オブジェクトの状態を保存して復元します → リファレンス
  • Null Object - 何もしないデフォルトを用意し、null チェックを不要にします → リファレンス
  • Observer - 状態が変化した際に、依存するオブジェクトへ自動的に通知します → リファレンス
  • State - 内部状態の遷移に応じて振る舞いを変えます → リファレンス
  • Strategy - 実行時にアルゴリズムを切り替えられるようにします → リファレンス
  • Template Method - アルゴリズムの骨格を定義し、具体的な手順をサブクラスに実装させます → リファレンス
  • Visitor - クラスを変更せずに、オブジェクトへ操作を追加します → リファレンス

どのパターンを使うべきか

問題パターン
関連するオブジェクトのファミリーを作成する必要があるAbstract Factory
オプションが多く、複雑なオブジェクトを構築するBuilder
インスタンス化をサブクラスに委ねたいFactory Method
複雑なオブジェクトのコピーが必要Prototype
グローバルにインスタンスを厳密に1つだけにする必要があるSingleton
互換性のないインターフェースを連携させる必要があるAdapter
抽象化と実装を独立して変更したいBridge
統一的に扱う必要があるツリー構造Composite
サブクラス化せずに責務を動的に追加するDecorator
複雑なサブシステムのインターフェースを簡素化するFacade
類似したオブジェクトが多数あり、メモリを過剰に消費しているFlyweight
アクセスを制御する、遅延読み込みを追加する、またはアクセスを記録するProxy
リクエストを処理するハンドラーが複数あり、どれが処理するか分からないChain of Responsibility
操作をキューに追加する、記録する、または取り消すCommand
単純な言語や文法を解釈する必要があるInterpreter
内部構造を公開せずにコレクションを走査するIterator
多数の通信オブジェクト間の結合を弱めるMediator
取り消しやスナップショットの機能が必要Memento
1対多のイベント通知Observer
オブジェクトの振る舞いが状態に依存するState
実行時にアルゴリズムを切り替える必要があるStrategy
カスタマイズ可能な手順を持つアルゴリズムの骨格Template Method
オブジェクト構造を変更せずに操作を追加するVisitor

ベストプラクティス

  • 継承よりコンポジションを優先します。深いクラス階層を作る前に、Decorator、Strategy、Bridgeを検討してください
  • 仮定上の問題ではなく、実際の問題にパターンを適用します
  • 適している場合は、使用言語の最新機能を活用します。Stateには列挙型、Value Objectsには不変の値型、Strategyには第一級関数を使います
  • 適切な場合はパターンを組み合わせます(たとえば、Builder + Fluent Interface、Strategy + Factory Method)
  • パターンの実装は最小限に保ちます。パターンによって取り除かれる複雑さより、追加される複雑さのほうが大きい場合は、再検討してください

コメント