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

こんにちは。KOUKIです。

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

golang

Prototypeパターン

Prototypeパターンはインスタンスの生成に関するデザインパターンで、インスタンスからインスタンスをコピーする方法を提供しています。

サンプルコード

シャツに関するサンプルコードで、Prototypeパターンの理解を深めましょう。

このコードでは、White、Black、Blueの3種類のシャツがあると明示されています。

NewShirtsCloner関数を実行するとShirtClonerインターフェースを実装したインスタンスを取得できます。

普通ならそれぞれの種類ごとにNewShirtsCloner関数を呼び出すことになると思いますが、Prototypeパターンではインスタンスをコピーして新しいインスタンスを作成するため、不要になります。

テストコード

実装はまだ途中ですが、テストコードで動きを確認してみましょう。

前述の通り、NewShirtsClonerの呼び出しは一度のみです。それ以降は、GetCloneを使って種類ごとのシャツのコピーを取得しようとしています。

また、シャツのIDはWhiteを使っておりGetCloneの呼び出し時に引数として渡しています。これで、同じインスタンスを取得していないか(コピーされたインスタンスが返されるか)テストをするわけです

テストを実行してみましょう。

期待通り、エラーになりましたね。

インスタンス生成

GetCloneメソッドにインスタンスの生成ロジックを実装します。

シャツのIDに応じてインスタンスをコピー(ポインタを使用)し、呼び出し元に返しています。

テストを実行します。

OKですね。

おわりに

このパターンはどんなときに使うんだ?と思いますよね。ちょっと使い道が思い浮かばないので、サンプルが悪かったかもしれません。

デザインパターンを意識しすぎて、読みにくいコードを書いてしまわないように、「何故、このデザインパターンを使うのか」ということを念頭に置いて実装していきたいですね。

それでは、また!

Go記事まとめ

デザインパターンまとめ

Go記事をまとめます。

ソースコード

prototype.go

prototype_test.go

コメントを残す