Visitorパターン
Visitorパターンは、あるオブジェクトの処理を構造から分離するデザインパターンです。
自分なりにVisitorパターンをクラス図にまとめてみました。
Visitorパターンのクラス図
Visitorパターンのクラス図の解説
Acceptor側(Acceptorを継承するAcceptor1,2)でメソッドを作成する場合に、そのメソッドをAcceptor1,2クラス内に実装するのではなく、Visitor1,Visitor2クラスに実装し、Acceptor1,2ではそのVisitor1,2オブジェクトを引数にもつacceptメソッドを用意し、そのメソッド内でVisitorオブジェクトのvisitメソッドを呼び出すようにする。visitメソッドではAcceptorを引数に取るので、その属性を参照して処理を行うことができる。
このような構成にすることで、オブジェクト(Acceptor)とその処理(Visitor)を別クラスに分離できる。すると、メソッドを追加したいような場合にはVisitorを実装するクラスを追加すればよくなり、Acceptor側は変更する必要がなくなる。
Visitorパターンをどういう場合に使うか
メソッドに追加変更が発生することが想定されるような場合に、Visitorパターンにしておくことにより、Visitor側の変更だけでよくなり、保守性が高まることが想定される。
PlantUMLでVisitorパターンのクラス図を記述する
Visitorパターンのクラス図をPlantUMLで書いたときのソースです。
@startuml Visitor
interface Visitor{
+ visit(Element) : void
}
class Visitor1 implements Visitor{
+ visit(Acceptor) : void
}
class Visitor2 implements Visitor{
+ visit(Acceptor) : void
}
abstract class Acceptor{
+ accept(Visitor)
}
class Acceptor1 extends Acceptor{
+ accept(Visitor) //引数Visitorのvisitメソッドを実行する
}
class Acceptor2 extends Acceptor{
+ accept(Visitor) //引数Visitorのvisitメソッドを実行する
}
Acceptor .r.> Visitor
@enduml
参考サイトURL
13.Visitor パターン | TECHSCORE(テックスコア)
Visitor パターン – Wikipedia
PHPによるデザインパターン入門 – Visitor〜要素と要素に対する操作を分離する – Do You PHP はてブロ