All Articles

増補改訂版 Java言語で学ぶデザインパターン入門 読了

増補改訂版 Java言語で学ぶデザインパターン入門を途中セクションまで読みました。 今更体系的に学ぶデザインパターン。下記もいつかやりたい。

雑メモ

  • Iterator
    • client 側で、捜査対象の実装を気にしなくて済む
  • Adapter
    • 継承と委譲パターンがある
    • interface またはクラスを仲介することで、テスト済みのクラスを再利用できる
      • e.g. v1 のクラスを使った v1 のプログラムがある →クラスを v2 にアップデートしたときに、v2 のクラスを adaptee (適合される側)として隠蔽し、 v2 → v1 の変換をする adapter を実装することで、両方のバージョンを共存できる
  • Template Method
    • 抽象クラスを継承した、サブクラスでメソッドを定義する
    • 抽象クラスの方で、処理の大枠を定義しておく
  • Factory Method
    • Template Method の応用
    • 抽象的な Creator / Product と具体的な Creator / Product を定義
    • Instance の生成をサブクラスに集約し、抽象的な Creator / Product の再利用性を高める
  • Singleton
    • instance の数を一個に制限する
  • Prototype
    • instance を作るときに、クラスからではなく他の instance を複製する
  • Builder
    • Director と Builder を組み合わせることで、インスタンスの生成過程を抽象化する
    • Directorクラスは Builder クラスの実装を意識しなくて良くなる
  • Abstract Factory
    • 抽象的な Product / Factory と具体的な Product / Factory を定義する
  • Bridge
    • 機能と実装の 抽象クラスを分けることで、機能の拡張が楽になる
    • 実装側のクラスの method を委譲の形で実行する
  • Strategy
    • 委譲先のクラスを切り替えることで、アルゴリズムを実行時に任意のものに出来る
    • (使い道があんまり分からなかった)
  • Composite
    • Leaf / Composite / Component が登場し、 Leaf / Composite を Component として同一視する
    • 「複数と単一の同一視」により、再帰的な実装ができる
  • Decorator
    • Composite に似てるが、再帰的に外枠に機能追加する
  • Visitor
    • Visitor (訪問者) と、 Element (要素) に分ける
    • データ構造とその要素に対する処理を分離できる
  • Chain of Responsibility
    • Handler (処理者) と Client (要求者) に分ける
    • Handler は 抽象クラスである
    • ConcreteHandler (Handler のサブクラス) で、どのように解決するかのロジックを書く
    • ConcreteHandler をどの順番で解決させるかを Main method で書く
  • Facade
    • Facade は建物の正面の意味
    • 複雑なクラス同士の関係や前提条件を Facadeクラスに隠蔽する
  • Mediator
    • UI の有効・無効化のロジックを Mediator (調停者)の役に回す
    • UI は Colleague (同僚) として実装し、有効・無効化は自身では意識しない
  • Observer
    • Subject (被験者) と Observer (観察者) を実装し、Subject の変更を Observer に通知する
  • Memento
    • あるインスタンスの保存と復元を行うためのデザインパターン
    • Originator Memento Caretaker が登場する
    • Caretaker が一連の操作を行う
      • スナップショットが必要なタイミングで Caretaker が Originator に依頼をする
      • Caretaker は Originator から Memento を受け取り保存する
      • Caretaker は保存しておいた Memento をよしななタイミングで Originator に渡す
      • Originator が Memento から情報の復元を行う
  • State
    • State は interface であり、各「状態」に依存したメソッドの集まり
      • State を実装するクラスで層を分けることで、各 UI のイベントハンドラーで条件分岐しなくて良くなる
    • Context (状況) の役があり、現在の状態を持つ
  • Flyweight
    • Flyweight を共有して使う
    • FlyweightFactory の役は hash などを用いて、 Flyweight のインスタンスを重複して持たないようにする
  • Proxy
    • Proxy は代理人であり RealSubject は本人役
    • Subject は両者を同一視するための interface
    • Proxy が可能な限り処理を代替わりし、必要になってから RealSubjectクラスを生成する
  • Command / Interpreter
    • チラ見だけ

Published Feb 20, 2023

しがないエンジニアがつぶやきを残します