Minstrel

Ruby, JavaScript, Haskell, Math, Music, Design

Rubyでデザインパターン① デザインパターン概要

参考記事

事例で学ぶデザインパターン 第1回 | オブジェクトの広場

デザインパターンとは

クラスの責務分割のパターン

GoFデザインパターン

生成

Abstract Factory Factory Method Singleton Builder Prototype

構造

Adaptor Bridge Composite Decorator Facade Flyweight Proxy

振る舞い

Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor

デザインパターンの効果

1. 変更容易性

2. 理解容易性

前提知識

継承

is-aの関係

コンポジション

has-aの関係 moduleとかオブジェクトの注入とか

ポリモーフィズム

問題解決の着眼点

クラスの責務分割はおおまかに3パターン

1. 変更要素の分離

アプリケーション内で固定化している部分と変動している部分をクラスとして分離する。 例1) Stateパターン: 「状態」を変動要素として切り出す 例2) Strategyパターン: 「アルゴリズム」を変動要素として切り出す

2. 間接層の道入

目的は、クラスとクラスの結合度を弱めることで 一方のクラスの変更が他方のクラスに影響を与えにくいようにすること。 例1) Proxyパターン 例2) Adaptorパターン 本来使用したい機能をもっているクラスと、それを使用するクラスの直接結合を避け、結合度を下げている。

3. 複雑さの軽減

分割をすることで、一つのクラスの責務を小さくする。 →理解容易性、変更容易性があがる