[Go言語]Mementoパターンを学ぼう!

こんにちは、KOUKIです。

この記事では、デザインパターンの一つであるMementoパターンについて紹介します。

デザインパターンまとめ

シチュエーション

Memento は、「記念品」や「形見」を意味する英単語です。

Memento パターンは、 インスタンスのあるときの状態をスナップショットとして保存しておくことで、 その時のインスタンスの状態を復元することを可能にするものです。

例えば、DB更新を例に考えてみましょう。

特定の商品を購入して行って、商品購入後にキャンセルしたいとします。つまり、買わなかった状態にDBの状態を戻したいわけですね。

これをMementoパターンを使って実装してみましょう。

Mementoパターンの適用

Memento構造体

最初に、Memento構造体を実装します。

この構造体が、スナップショット(更新前のDBの状態)になります。

DB構造体

次に、DB構造体を実装します。

DBコンストラクタ

DBのコンストラクタを実装しましょう。

戻り値として、Mementoインスタンスを返しています。これで、初期化時のDBのスナップショットが取得できます。

DBのメソッド

DBのメソッドを実装しましょう。

Buy/Restoreメソッドのパラメータには、Mementoを指定しています。これにより、商品のスナップショットを残せますし、リストアも可能になりました。

使ってみよう

ここまで実装したプログラムを使ってみましょう。

こんな感じですね。

まとめ

Mementoパターンは、結構使えそうな気がしますね。

インスタンスの状態をローカルに保存しておいて、もし何か重大な失敗があれば元に戻す仕組みを作っておく、みたいな感じなので。

デザインパターンを学ぶと、インターフェースや構造体の新しい使い方に気づくことができるので、結構おすすめです^^

それでは、また!

次回

面白そうなので、次回に続きます。

Go言語まとめ

ソースコード

コメントを残す