디자인 모드 학습의 방문자 모드
방문자 모드: 객체 구조에 작용하는 요소를 식별하는 작업입니다.그것은 너로 하여금 각 원소를 바꾸지 않는 전제에서 이 원소들의 새로운 조작에 작용하게 할 수 있다.
2. 코드 예:
package DesignPattern.VisitorPattern;
public abstract class Visitor {
public abstract void VisitConcreateElementA(ConcreateElementA concreateElementA);
public abstract void VisitConcreateElementB(ConcreateElementB concreateElementB);
}
A
package DesignPattern.VisitorPattern;
public class ConcreateVisitorA extends Visitor{
@Override
public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
// TODO Auto-generated method stub
System.out.println(concreateElementA.getName() + " , , 。");
}
@Override
public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
// TODO Auto-generated method stub
System.out.println(concreateElementB.getName() + " , , 。");
}
}
B
package DesignPattern.VisitorPattern;
public class ConcreateVisitorB extends Visitor{
@Override
public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
// TODO Auto-generated method stub
System.out.println(concreateElementA.getName() + " , 。");
}
@Override
public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
// TODO Auto-generated method stub
System.out.println(concreateElementB.getName() + " , 。");
}
}
C
package DesignPattern.VisitorPattern;
public class ConcreateVisitorC extends Visitor{
@Override
public void VisitConcreateElementA(ConcreateElementA concreateElementA) {
// TODO Auto-generated method stub
System.out.println(concreateElementA.getName() + " , 。");
}
@Override
public void VisitConcreateElementB(ConcreateElementB concreateElementB) {
// TODO Auto-generated method stub
System.out.println(concreateElementB.getName() + " , 。");
}
}
package DesignPattern.VisitorPattern;
public abstract class Element {
public abstract void Accept(Visitor visitor);
}
A
package DesignPattern.VisitorPattern;
public class ConcreateElementA extends Element{
private String name = "";
public ConcreateElementA(String name) {
this.name = name;
}
@Override
public void Accept(Visitor visitor) {
// TODO Auto-generated method stub
visitor.VisitConcreateElementA(this);
}
public String getName() {
return this.name;
}
}
B
package DesignPattern.VisitorPattern;
public class ConcreateElementB extends Element{
private String name = "";
public ConcreateElementB(String name) {
this.name = name;
}
@Override
public void Accept(Visitor visitor) {
// TODO Auto-generated method stub
visitor.VisitConcreateElementB(this);
}
public String getName() {
return this.name;
}
}
package DesignPattern.VisitorPattern;
public class Client {
public static void main(String[] args) {
ObjectStructure objectStructure = new ObjectStructure();
objectStructure.add(new ConcreateElementA(" "));
objectStructure.add(new ConcreateElementB(" "));
ConcreateVisitorA v1 = new ConcreateVisitorA();
ConcreateVisitorB v2 = new ConcreateVisitorB();
ConcreateVisitorC v3 = new ConcreateVisitorC();
objectStructure.Accept(v1);
objectStructure.Accept(v2);
objectStructure.Accept(v3);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
golang에서 대상 방법을 함수 지침으로 삼다누드 함수 를 지침 으로 삼는 것 은 그리 신기한 일 이 아니다. 다른 언어 도 괜찮다. 골롱 도 당연히 가능하다. 예를 들면 그러나 아래와 같이 대상의 실례적인 방법은 함수 매개 변수로 전달될 수 있습니까? 답은 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.