[Golang]Adapterパターンを学ぼう!~Version 2~

こんにちは。KOUKIです。

以前、Adapterパターンについて記事を書きましたが、別パターンでも実装したので紹介します。

golang

Adapterパターン

Adapterパターンをざっくり説明すると、「既存の機能を変更せずに新しい機能を追加するにはどうすれば良いか?」という課題をクリアするためのものです。

プリンターを例に考えてみましょう。

左が古いプリンターで、右が新しいプリンターだとします。

それぞれ「印刷する」という機能を有していますが、製品自体が違うので当然出入力形式が異なります。

この差異を埋めるために、変換機(Adapter)が必要になるでしょう。

実装

早速、実装してみます。

LegacyPrinterインターフェースは、古いプリンターの印刷機能を定義したものです。そして、NewPrinterインターフェースは、新しいプリンターの印刷機能を表しています。

そして、今回の肝であるAdapterは、PrinterAdapter構造体で定義しています。この構造体はOldPrinterを保持していることがポイントです。

何故なら、この様に実装すると「古いプリンターの印刷機能が使える」からです。既存の機能を変更することなく、使えると言うことですね。

テストコード

テストコードを実装して、挙動確認をしましょう。

PrinterAdapterで、呼び出すプリンターを選択しています。

そして、古い/新しいにかかわらず「adapter.PrintStored()」で印刷機能を呼び出せました!

テストコードを実行します。

OKですね。

おわりに

Adapterパターンの使い所はどこなのでしょうか。

将来的にインターフェースが大きくなると予想されるもの?

あるいは、疎結合をを意識したプログラミングを実装する時?

実は、実務では使ったことがないパターンなんですよね。しかし、Adapterを噛ませるという考え方は役にたつと思うので、知識として知っておいてください。

それでは、また!

Go記事まとめ

デザインパターンまとめ

Go記事をまとめます。

ソースコード

adapter.go

adapter_test.go

コメントを残す