Behavioral 모드의 Visitor 모드
4744 단어 패턴
객체 구조에 작용하는 요소의 작업을 나타냅니다.그것은 너로 하여금 각 원소의 종류를 바꾸지 않는 전제에서 이 원소에 작용하는 새로운 조작을 정의할 수 있게 한다.
2. 별명
없음
3. 동기
컴파일러를 고려해서, 그는 원본 프로그램을 추상적인 문법 트리로 표시했다.이 컴파일러는 모든 변수가 정의되었는지 확인하는 등 추상적인 문법에서 '정적 의미' 분석을 실시해야 한다.그도 코드를 생성해야 한다.코드 검사, 코드 최적화, 절차 분석, 변수가 사용 전에 초기값이 부여되었는지 확인하기 위해 많은 조작을 정의할 수 있기 때문이다.또한 추상적인 문법 트리를 사용하여 아름다운 형식의 인쇄, 프로그램 재구성, 코드 instrumentation 및 대상을 다양한 도량으로 인쇄할 수 있다.
4. 적용성
Visitor 모드는 다음과 같습니다.
5. 구조
방문자 모델은 데이터 구조와 구조에 작용하는 조작해의 결합을 통해 조작 집합을 상대적으로 자유롭게 진화시킬 수 있다.방문자 모델은 데이터 구조가 상대적으로 안정적이고 알고리즘이 변하기 쉬운 시스템에 적용된다.방문자 패턴 때문에 알고리즘 조작이 쉬워졌습니다.만약에 시스템 데이터 구조의 대상이 쉽게 변화하고 자주 새로운 데이터 대상이 증가하면 방문자 모델을 사용하는 데 적합하지 않다.방문자 모드의 장점은 추가 조작이 매우 쉽다는 것이다. 왜냐하면 추가 조작은 새로운 방문자를 증가시키는 것을 의미하기 때문이다.방문자 모드는 시스템 데이터 구조에 영향을 주지 않고 관련 행위를 한 방문자 대상에 집중시킨다.그 단점은 새로운 데이터 구조를 늘리는 것이 어렵다는 것이다.From 백과사전은 간단하게 말하자면 방문자 모델은 대상의 데이터 구조와 행위를 분리하는 방법이다. 이런 분리를 통해 방문자에게 다른 수정 없이 동적으로 새로운 조작을 추가할 수 있다.단순 다이어그램:
6. 코드 예
원본을 보십시오: 방문할 대상을 저장하고 코드를 구현하는 Visitor 클래스: 상태 구조:
public interface Visitor {
public void visit(Subject sub);
}
public class MyVisitor implements Visitor {
@Override
public void visit(Subject sub) {
System.out.println("visit the subject:"+sub.getSubject());
}
}
Subject 클래스, accept 방법, 접근할 대상을 받아들이고 getSubject () 는 접근할 속성을 가져옵니다.
public interface Subject {
public void accept(Visitor visitor);
public String getSubject();
}
public class MySubject implements Subject {
@Override
public void accept(Visitor visitor) {
visitor.visit(this);
}
@Override
public String getSubject() {
return "love";
}
}
테스트 클래스:
public class Test {
public static void main(String[] args) {
Visitor visitor = new MyVisitor();
Subject sub = new MySubject();
sub.accept(visitor);
}
}
출력:visit thesubject: love 이 모델은 장면에 적용됩니다. 만약에 우리가 기존의 클래스에 새로운 기능을 추가하고 싶다면 몇 가지를 고려해야 합니다. 1. 새로운 기능이 기존 기능과 호환성에 문제가 생기지 않을까요?2、나중에 추가해야 하지 않을까요?3. 클래스가 코드를 수정하는 것을 허락하지 않으면 어떻게 합니까?이런 문제에 직면하면 가장 좋은 해결 방법은 방문자 모델을 사용하는 것이다. 방문자 모델은 데이터 구조가 상대적으로 안정적인 시스템에 적용되고 데이터 구조와 알고리즘을 결합시킨다.
7. 관련 모드
참조:
http://openhome.cc/Gossip/DesignPattern/DecoratorPattern.htm http://item.jd.com/10057319.html http://blog.csdn.net/zhangerqing/article/details/8239539
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
나쁜 REGEX와 좋은 REGEX와 최상의 REGEX정규식(RegExp/regex)이란 문자열의 패턴을 표현하는 표기법 [2016-05-02T16:05:18 #92430] INFO -- : Served asset /navi/hu-0005-03/style.css - 3...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.