Swiftでのデザインパターンまとめ3(オブジェクトの振る舞いに関するパターン)

botman_blue iOS

はじめに

その2の続き。今回はオブジェクトの振る舞いに関するパターンについてです。

  • オブジェクトの振る舞いに関するパターン
    • Iterator パターン
    • Command パターン
    • Chain of Responsibility パターン
    • Memento パターン
    • Observer パターン
    • Mediator パターン
    • Interpreter パターン
    • State パターン
    • Strategy パターン
    • Template Method パターン
    • Visitor パターン

その1、2同様、基本的には下記2つを参考に書いてます。

github でこんなんみつけたのでこれ見ればいいと思うよ!(私まだ理解してないので。。。)

ochococo/Design-Patterns-In-Swift

Iterator パターン

オブジェクト集合の構造に依存することなく走査、順次アクセスを可能にするための仕組み。

配列じゃなくても配列みたいに繰り返し処理ができる!

参考:マンガでわかる Iterator

Command パターン

一連の処理群を1つのオブジェクトにまとめて扱う仕組み。マクロみたいな感じで使える。

Dog の操作はすべて DogManager で行える!この例だと enum でいいんじゃね?ってなるけど処理の中身が複雑になれば力を発揮するはず??

参考:マンガでわかる Command

Chain of Responsibility パターン

処理に関わるオブジェクトを鎖状につないで処理できるオブジェクトが見つかるまでたどる仕組み。

レベル3の要求は主任が承認してくれるけどレベル100の要求はだれも権限を持ってないので承認できない!!!

参考:マンガでわかる Chain of Responsibility

Memento パターン

オブジェクトの状態を記憶して、過去の状態に復帰できるようにする仕組み。つまり cmd + Z 機能!(Memento の単語の意味を調べると「記念品」、「形見」とかでてきた)

参考:マンガでわかる Memento

Observer パターン

状態の変化を通知して監視対象に通知する仕組み。(Listenerともいうらしい。Android の onClickLisner とかがそうなのかも??)
通知を発行するオブジェクトを Subject, 通知を待つオブジェクト(観測者)を Observer という。

KVO とか NotificationCenter が Observer パターンだと思う。

参考:マンガでわかる Observer

Mediator パターン

オブジェクト間の相互作用を仲介してオブジェクト間の結合度を低くする仕組み。(Mediator は仲介者という意味っぽい)

プログラマーAはプログラマーBのことを知らなくてもリーダーを介してメッセージを送れるようになった!

参考:マンガでわかる Mediator

Interpreter パターン

計算式や演算の構文木を評価して解を求める仕組みらしいです。。。
ちょっとこれは全然理解できなかったので↓のやつも ochococo/Design-Patterns-In-Swift から拝借しました。

参考:マンガでわかる Interpreter

State パターン

お腹が減ってる状態でも眠い状態でもやる気はない!
今の状態は何か、その状態における振る舞いはこうだ、と一意に決めようという発想らしいです。(振る舞いは外部に分離してしまうってことだと思う。)

参考:マンガでわかる State

Strategy パターン

取り扱う対象に応じて処理オブジェクトを変更して、振る舞いを変える仕組み。Strategy は戦略(アルゴリズム)って意味。

↑のはいいのが思いつかなかったのでSwiftで書くデザインパターンまとめのやつを拝借しました。
アルゴリズムを分離して分岐がなくなるのがメリット??(オブジェクトを差し替えれば動作が変わるので分岐がなくなる)

参考:マンガでわかる Strategy

Template Method パターン

処理の途中で抽象メソッドを使ってテンプレート処理を実現する仕組み。

あってるかわからないけどこれで動画と画像を表示できるようになった。

参考:マンガでわかる Template Method

Visitor パターン

データの構造と処理を分離して処理の変更に柔軟性を持たせる仕組み。
これもいまいちよくわからなかったので ochococo/Design-Patterns-In-Swift から拝借しました。(なんでそもそも Visitor なんだ??)

参考:マンガでわかる Visitor

さいごに

参考サイトにも下記のように書いてあったがなんかええ感じになるんやろ?使って書いた方がクールやん?みたいなパターンを導入するのが目的になると危険なので気をつけよう!"目的のないパターンはただの難読化" ということを肝に銘じよう!

GoF デザインパターン チートシート

目的のないパターンはただの難読化です。

まとめてみたけど結構意味が理解できてないパターンも多いのでまた後日追記するかも。数年後の自分に期待。。。

参考

https://amzn.to/3Oid4iZ

コメント

タイトルとURLをコピーしました