Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Rubyによるデザインパターン

Ruby | Convention over Configration(設定より規約。CoC) 〜 プロダクトコード・テストコード・ドキュメントの一括生成・一括更新をCoCで行ってみる

概要 Convention over Configration(設定より規約。CoC) 〜 プロダクトコード・テストコード・ドキュメントの一括生成・一括更新をCoCで行ってみる 詳細 Convention over Configration(設定より規約。CoC)はRuby on Railsで利用されているパターンです。規約…

Ruby | カスタムオブジェクトを作成する

概要 カスタムオブジェクトを作成する 詳細 Rubyのメタプログラミング機能を利用して、動的にクラス内の定義を生成します。 サンプル仕様 lambdaのリストを与えると、リストの中からランダムにlambdaを実装したメソッドを定義するクラスを作成します。動的に…

Ruby | DSL(Domain Specific Language) 〜 N進数対応表の出力DSLを作ってみる

概要 DSL(Domain Specific Language) 〜 N進数対応表の出力DSLを作ってみる 詳細 DSL(Domain Specific Language)=ドメイン特化言語。 Ruby詳しくなくても、対象ドメインに詳しければ動作させることができるような ミニ言語=ドメイン特化言語を作成する。代…

Ruby | Builder Pattern 〜 プロジェクトチームを組み立てる

概要 Builder Pattern 〜 プロジェクトチームを組み立てる 詳細 Builder Patternは、一定の設定手順のあるオブジェクトを 一か所で管理して組み立てるためのパターンです。これにより、オブジェクトの利用各所で何度も複雑な手順を呼び出す手間や、 呼出し手…

Ruby | Factory Pattern 〜 CodeIQの参加者を生成する

概要 Factory Pattern 〜 CodeIQの参加者を生成する 詳細 Factory Patternは、インスタンス生成をサブクラスに任せるパターン。 Creatorにインスタンス生成の手順を受け持ち、 Creatorを継承したサブクラスがインスタンスの生成を受け持つ。実装内容はTempla…

Ruby | Singleton Pattern

概要 Singleton Pattern 詳細 Singleton Patternは、1つのインスタンスを保証するパターンです。 サンプル仕様 システムで唯一のアクセスカウンタを作成します。 サンプル require 'singleton' class AccessCounter include Singleton attr_reader :counter …

Ruby | Decorator Pattern 〜 CodeIQの解答コメントをデコレーションする

概要 Decorator Pattern 〜 CodeIQの解答コメントをデコレーションする 詳細 Decorator Patternは、既存のオブジェクトに対して新たな機能をレイヤ状に追加していけるようにするパターンです。 これにより、一つのクラスやメソッドに責務の異なる様々な機能…

Ruby | Proxy Pattern 〜 CodeIQの簡単な問題は後輩Proxyに解かせる

概要 Proxy Pattern 〜 CodeIQの簡単な問題は後輩Proxyに解かせる 詳細 Proxy Patternは、生成コストが大きかったり・何らかの前処理や後処理をする領域がほしかったりする場合に 本物のオブジェクトのふりをするオブジェクトを作成するパターンです。これに…

Ruby | Adapter Pattern

概要 Adapter Pattern 詳細 Adapter Patternは、既存のインターフェースと新たなインターフェースの橋渡しを行います。 サンプル仕様 あるサービスを提供するシステムがあります。 複数の利用者がサービスを呼び出します。1次開発ではサービスはargs引数のみ…

Ruby | Command Pattern

概要 Command Pattern 詳細 Command Patternは、命令を実行するためのパターンです。 命令をCommandとしてクラスにしておくことで、実行方法と命令を分離することができます。 これにより ・命令の履歴を保存する ・Undo機能を持つ ・命令をためてから任意の…

Ruby | Iterator Pattern

概要 Iterator Pattern 詳細 Iterator Patternは、内部オブジェクトの保持形式に依存せずに外部に連続して走査するための インターフェースを提供するパターンです。 サンプル1仕様 Stringクラスの各単語へのIteratorを実装する。 ここでは、半角スペースで…

Ruby | Composite Pattern

概要 Composite Pattern 詳細 Composite Patternは、全体が部分のように振る舞えるようにするパターンです。 階層やツリー構造を作り、利用者からは全体なのかツリーなのか意識しないで使えるように 設計したい場合に利用します。 サンプル仕様 マインドマッ…

Ruby | Observer Pattern 〜 CodeIQの出題を通知する

概要 Observer Pattern 〜 CodeIQの出題を通知する 詳細 Observer Patternは、あるクラスの状態の変化を他のクラスに通知します。 通知する側をSubject, 通知を受ける側をObserverとよびます。 サンプル仕様 CodeIQの出題者と解答者を例にとります。 解答者…

Ruby | Strategy Pattern

概要 Strategy Pattern 詳細 Strategy Patternは、委譲を利用してプログラム内のアルゴリズムの一部を交換可能にします。 サンプル仕様 株式会社HogeHogeの社内レポートを作成する。 レポートはHTMLとMarkdownの2種類です。 (HTMLはMarkdownから出せばいいよ…

書籍 Rubyによるデザインパターンに関するまとめ

概要 書籍 Rubyによるデザインパターンに関するまとめ 一覧 パターンとRuby 章 URL/内容 よいプログラムとパターン デザインパターンの成り立ちなどについて Rubyをはじめよう Rubyの基本的な文法について。普段Rubyを日常的に使っているなら読み飛ばせる内…

Ruby | Template Method Pattern

概要 Template Method Pattern 詳細 Template Method Patternは、アルゴリズムの大部分は同じだが 一部だけが異なる部分があるような場合に・変わらない部分を基底クラスに ・変わる部分を複数の具象クラスにする設計手法です。 (変わる部分を個別のクラス…