제2 2 편 디자인 모델 - 방문 자 모델

정의: 특정한 대상 구조 에 작용 하 는 각 요소 의 조작 을 나타 내 고 하나의 요소 의 유형 을 바 꾸 지 않 는 전제 에서 이 일련의 요소 에 작용 하 는 새로운 조작 을 정의 할 수 있 습 니 다.
코드:
package visitor_model;

import java.util.ArrayList;
import java.util.List;

/**
 * @author naivor
 *		     -   
 */
public class VisitorModel {
	public static void main(String[] args) {
		ObjectStructure structure=new ObjectStructure();
		
		Element elementA=new ElementA();
		Element elementB=new ElementB();
		
		structure.attach(elementA);
		structure.attach(elementB);
		
		Visitor visitor1=new Visitor1();
		Visitor visitor2=new Visitor2();
		
		structure.accept(visitor1);
		structure.accept(visitor2);
	}
}
/**
 * 
 * @author naivor
 *		     -      
 */
abstract class Visitor{
	public abstract void visitElementA(ElementA elementA);
	public abstract void visitElementA(ElementB elementA);
}
/**
 * 
 * @author naivor
 *		     -   1 
 */
class Visitor1 extends Visitor{
	@Override
	public void visitElementA(ElementA element) {
		//   1  ElementA     
	}

	@Override
	public void visitElementA(ElementB element) {
		//   1  ElementB     
	}
}
/**
 * 
 * @author naivor
 *		     -   2 
 */
class Visitor2 extends Visitor{
	@Override
	public void visitElementA(ElementA element) {
		//   2  ElementA     
	}
	
	@Override
	public void visitElementA(ElementB element) {
		//   2  ElementB     
	}
}
/**
 * 
 * @author naivor
 *		     -     
 */
abstract class Element{
	public abstract void accept(Visitor visitor); 
}
/**
 * 
 * @author naivor
 *		     -  A 
 */
class ElementA extends Element{
	@Override
	public void accept(Visitor visitor) {
		visitor.visitElementA(this);
	}
	
	public void operate(){
		//ElementA     
	}
}
/**
 * 
 * @author naivor
 *		     -  B 
 */
class ElementB extends Element{
	@Override
	public void accept(Visitor visitor) {
		visitor.visitElementA(this);
	}
	
	public void operate(){
		//ElementB     
	}
}
/**
 * 
 * @author naivor
 *		     -     
 */
class  ObjectStructure{
	private List<Element> elements=new ArrayList<Element>();
	
	public void attach(Element element){
		elements.add(element);
	}
	public void detach(Element element){
		elements.remove(element);
	}
	public void accept(Visitor visitor){
		for (Element element : elements) {
			element.accept(visitor);
		}
	}
}

좋은 웹페이지 즐겨찾기