Java 방문 자(Visitor)모드 구현

interface Visitor {
	void visit(Gladiolus g);

	void visit(Chrysanthemum c);
}
// concrete visitor		    
class StringVisitor implements Visitor {
	String s;

	public String toString() {
		return s;
	}

	public void visit(Gladiolus g) {
		s = "Gladiolus";
	}

	public void visit(Chrysanthemum c) {
		s = "Chrysanthemum";
	}
}
// concrete visitor		    
class BeeVisitor implements Visitor {
	public void visit(Gladiolus g) {
		System.out.println("        Gladiolus");
	}

	public void visit(Chrysanthemum c) {
		System.out.println("        Chrysanthemum");
	}
}
interface Flower {
	void accept(Visitor v);
}
/*
 * concrete element		  
 */
class Chrysanthemum implements Flower {
	public void accept(Visitor v) {
		v.visit(this);
	}
}
// concrete element		  
class Gladiolus implements Flower {
	public void accept(Visitor v) {
		v.visit(this);
	}
}
//  Flower       
class FlowerGenerator {
	private static Random rand = new Random();

	public static Flower newFlower() {
		switch (rand.nextInt(2)) {
		default:
		case 0:
			return new Gladiolus();
		case 1:
			return new Chrysanthemum();
		}
	}
}
/*
 *    (Visitor)  		     
 *               ,       “   ”             
 *     ,                       ,      ,                              
 *   :       ,    ,                 ,   -    
 */
public class Test {
	/*
	 *                                    accept  ,                     
	 */
	public static void main(String args[]) {
		List flowers = new ArrayList();
		for (int i = 0; i < 10; i++)
			flowers.add(FlowerGenerator.newFlower());
		Visitor visitor = new StringVisitor();
		Iterator iterator = flowers.iterator();
		while (iterator.hasNext()) {
			iterator.next().accept(visitor);
			System.out.println(visitor);
		}
		System.out.println("---------------");
		/*
		 *          :BeeVisitor     
		 */
		Visitor visitor2 = new BeeVisitor();
		for (Flower flower : flowers) {
			flower.accept(visitor2);
		}

	}
}

인쇄 하 다.
Gladiolus
Chrysanthemum
Chrysanthemum
Gladiolus
Chrysanthemum
Chrysanthemum
Chrysanthemum
Chrysanthemum
Gladiolus
Gladiolus
---------------
        Gladiolus
        Chrysanthemum
        Chrysanthemum
        Gladiolus
        Chrysanthemum
        Chrysanthemum
        Chrysanthemum
        Chrysanthemum
        Gladiolus
        Gladiolus

좋은 웹페이지 즐겨찾기