参考
参考になります。ありがとうございます。
どんなもの?
異なるクラス同士のメソッドの違いを吸収して、うまく適合させるパターン
メリットは?
使用側(クライアント側)からどんなメソッドを読んでいるか意識しなくていいので、バージョンアップや突然の仕様変更時に改修のコストが減る
どんな時に使う?
既に使用実績があり、十分テストがされたクラスを再利用したい時
但し、この時にこのクラス自体に対して少しでも手を加えてしまうと、せっかくの使用実績が損なわれ、全動作テストをしなければいけなくなるのでこれは避けたい
そんな時に使う。
使い方
イメージ
- 使いたいメソッドを持つクラスAを新しく作るクラスB(Adapter, インターフェース)でラップする
- 新しく作ったクラスBでクラスAをextendsし、そこから
parent::~で親のメソッドを呼び出す- これによりメソッド名の差分をクラスBで吸収
- 呼び出し側はクラスBのメソッドを呼び出すだけなので、中でどんなメソッドを読んだイルカは何も意識しない
※上記は継承を使ったパターンだが、委譲を使ったパターンもある
Github
記事内のサンプルコードそのまんまですが、Githubに掲載。
https://github.com/Kuma-inataku/design_pattern/tree/develop/adapter
※サンプルコードそのままとはいえ、記事のままでは実際にテキストエディタに書いてみて値変更したりできないのでその点は実際に書いてみるのが大事かと。
所見
- 個人的にはextendsでクラス単位での依存関係をなるべく作りたくないと思うので、委譲がシンプルでいいと思った