LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

Visitor パターン

Visitor パターンは、オブジェクト指向プログラミング およびソフトウェア工学 において、 アルゴリズムをオブジェクトの構造から分離するためのデザインパターンである。分離による実用的な結果として、既存のオブジェクトに対する新たな操作を構造を変更せずに追加することができる。基本的には Visitor パターンは一群のクラスに対して新たな仮想関数をクラス自体を変更せずに追加できるようにする。そのために、全ての仮想関数を適切に特化させた Visitor クラスを作成する。Visitor はインスタンスへの参照を入力として受け取り、ダブルディスパッチを用いて目的を達する。Visitor は強力であるが、既存の仮想関数と比較して制限もある。各クラス内に小さなコールバックメソッドを追加する必要があり、各クラスのコールバックメソッドは新たなサブクラスで継承することができない。Visitor パターンの基本的な考えとして、codice_1 を引数として受け取る codice_2 メソッドを持ったクラスを複数、要素として持つ構造をとる。codice_3 は各要素クラスごとにcodice_2 メソッドを持つインタフェース である。特定の処理を実行する個別の具体的なcodice_1 クラスを作成することができる。具体的な codice_1 の codice_7 メソッドは、一つのクラスのメソッドとして考えるものではなく、二つのクラスのペア、すなわち具体的な visitor と特定の要素クラスに対するメソッドとして考えることができる。それゆえ、Visitor パターンは ダブルディスパッチ を従来の Java、Smalltalk、C++ などのオブジェクト指向プログラミング言語で模したものである。ダブルディスパッチと関数のオーバーロードとの違いについては、の記事を参照のこと。Java 言語でリフレクションを用いて Visitor パターンにおけるダブルディスパッチを模倣する機構を簡潔にする二つのテクニックが文書として公開されている(getting rid of accept() methods (Walkabout の派生形)および getting rid of extra visit() methods )。Visitor パターンは、オブジェクトの構造に繰り返しをどのように行うかを指定する。最も簡単な場合、各アルゴリズムが繰り返しを全く同じように行う場合、コンテナ要素の codice_2 メソッドは、codice_1 の codice_7 メソッドをコールバックするだけではなく、codice_1 オブジェクトを 全ての子要素の codice_2 メソッドに渡す。Visitor オブジェクトは主たる関数(複数の特化したメソッドで明示されている)を一つ持ち、その関数は codice_7 と呼ばれる。それゆえ、Visitor は関数オブジェクトやファンクタとして捉えることも容易である。同様に、 codice_2 関数は、特定の型のオブジェクトを順次走査して各要素に関数を適用する方法を知っている利用者、マッパーである。Common Lisp は 多重ディスパッチをサポートする数少ないオブジェクト指向システムではあるが、上記の例の最初の部分は多重ディスパッチに依存しない。多重ディスパッチを備えた Lisp のオブジェクトシステムは Visitor パターンを置き換えるものではなく、パターンそのものを残したより簡潔な実装を提供するのみである。UML のクラス図下記の例は、Java プログラミング言語のものである。下記の例は、C++ プログラミング言語のものである。Visitor パターンは関心の分離をより進展させる可能性があるが、加えて単純に多態的なメソッドを呼び出す以上の利点として、Visitor パターンでは状態を持つことができる。これは、オブジェクトに対して実行されるアクションが以前のアクションに依存するような多くのケースで極めて有用である。この例は、 のプログラミング言語 による実装(コンパイラやインタプリタによる)である。pretty-printer オブジェクト (本例では Visitor として実装されている)は、パースされ、処理されたデータ構造内のノードを巡回する。pretty-printer は次に、プログラムツリーのテキストによる表現を生成する。出力を人間が可読なものにするために、pretty-printer はプログラムの文や表現を適切にインデントしなければならない。「現在のインデント幅」が visitor により状態の一つとして追跡され、単純な多態的な関数の呼び出しとして、カプセル化が正しく行われ、インデント幅はパラメータとして公開され、呼び出し者はこのパラメータを正しく使用するためのメソッドの実装を信頼する。

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。