Visitor Pattern


Composite Patterの要素を取得する

Design Pattarm MENU

以下のクラス構成で確認します

クラス 説明
interface
face
型とaccept()を定義する
faceImple.class faceを実装する
faceList.class faceを実装する
Listを持つ
Listのiteratorを発行するメソッドを持つ
Visitor.class Visitor Patternを提供する
user(Main.class) 動作を確認する

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

interface_face
interface face{
  void accept(Visitor visit);
}
faceImple.class
class faceImple implements face{
  public void accept(Visitor visitor){
         System.out.println("."+this);}
}
faceList.class
class faceList implements face{
  List ls = new ArrayList();
  void      add( face fc){ls.add(fc);}
  public    void accept(Visitor visit){
            visit.visitor(this);}
  Iterator  iterate(){return ls.iterator();}
}
Visitor.class
class Visitor{
      void visitor( faceImple imple ){
           imple.accept(this);}
      void visitor( faceList list ){
           Iterator it = list.iterate();
           while(it.hasNext()){
                 face fc = (face) it.next();
                 System.out.println("/"+fc);
                 fc.accept(this);
           }
      }
}
user(Main.class)
public static void main(String[] args){
       faceList f1 = new faceList();
       faceList f2 = new faceList();
       faceList f3 = new faceList();
       f3.add(new  faceImple());
       f3.add(new  faceImple());
       f2.add(new  faceImple());
       f2.add(f3);
       f1.add(f2);
       f1.accept(new Visitor());
}