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

こんにちは、KOUKIです。

この記事では、前回に引き続き、デザインパターンの一つであるVisitorパターンについて紹介します。

デザインパターンまとめ

シチュエーション

前回の復習ですが、Visitor は、「訪問者」を意味する英単語で、Visitor パターンは、既存のコードを変更せずに既存のクラス階層に新しい処理を追加できるパターンです。

Classic Visitorパターンの適用

Go言語にはClassの概念はないですが、インターフェースを使ってClassを実装するみたいな書き方もできます。

前回作成したソースコードを、Classic Visitorパターンで書き換えてみましょう。

クラスの代わりにインターフェース

まず、クラスの代わりとなるインターフェースを実装します。

このExpressionVisitorインターフェースは、Visitor(Expression)を受け入れるメソッドを持ちます。

Visitorの共通インターフェース

次はVisitorが持つ共通のインターフェースを実装します。

Acceptの引数にExpressionVisitor(クラスのようなもの)を渡しているので、このインスタンスは、ExpressionVisitorに設定した4つのメソッドを持ちます。

Visitor

次に、Visitorを実装しましょう。

それぞれの構造体に設定したAcceptメソッドからExpressionVisitor(クラス)のメソッドへアクセスしています。

訪問先構造体

今回もVIsitorが訪問する構造体を実装します。

別の訪問先を実装したい場合は、別途、構造体を作ることになります。

訪問先構造体のメソッド

今回の訪問先は、顔文字を作成する機能を有します。

使ってみよう

ここまで実装したソースコードを使ってみましょう。

プログラムを実行します。

OKですね。

おわりに

今回のソースコードは、ちょっと複雑ですね。

クラスライクなインターフェースとそれをVisitorの共通インターフェースを用意し、Visitor構造体及び訪問先構造体を実装、個別に処理したいメソッド(クラスライクなインターフェースに実装したもの)を用意する感じです。

慣れていないとソースコードも追跡しにくい感じがしますが、使い所はきっとあると思うので、パターンとして知っておいて損はないと思います。

それでは、また!

Go言語まとめ

ソースコード

コメントを残す