디자인 모드: 방문 자 모드 (Vistor)
6664 단어 디자인 모드
방문 자 모델 의 목적 은 특정한 데이터 구조 요소 에 가해 진 조작 을 밀봉 하 는 것 이다. 이런 조작 이 수정 이 필요 하면 이 조작 을 받 아들 이 는 데이터 구 조 는 변 하지 않 을 수 있다.서로 다른 유형의 요소 에 다양한 접근 조작 방식 을 제공 하고 기 존 시스템 을 수정 하지 않 은 상태 에서 새로운 조작 방식 을 추가 할 수 있다. 이것 이 바로 방문 자 모델 의 모델 동기 이다.
방문 자 모델 은 특정한 대상 구조 에 작용 하 는 각 요소 의 조작 을 나타 내 고 우 리 는 각 요소 의 유형 을 바 꾸 지 않 는 전제 에서 이러한 요소 에 작용 하 는 새로운 조작 을 정의 할 수 있다.
방문 자 모델 은 데이터 구조 가 상대 적 으로 안정 적 인 시스템 에 적용 되 고 변화 하기 쉬 운 알고리즘 도 있다.
방문 자 모드 의 역할: 1. 방문 자 역할 (Visitor): 추상 적 인 클래스 나 인터페이스, 방문 자가 그 요 소 를 방문 할 수 있 음 을 설명 합 니 다. 구체 적 으로 프로그램 에서 visit 방법 중의 매개 변 수 는 어떤 대상 이 방문 할 수 있 는 지 정의 합 니 다.2. 구체 적 인 방문 자 역할 (Concrete Visitor): 모든 방문 자 역할 (Visitor) 성명 을 실현 하 는 작업.3. 요소 역할 (Element): 추상 적 인 클래스 나 인터페이스, Accept 작업 을 정의 하고 어떤 방문 자의 방문 을 받 는 지 설명 합 니 다.추상 적 인 요소 역할 은 보통 두 가지 방법 이 있 는데 하 나 는 자체 의 업무 논리 이 고 다른 하 나 는 어떤 방문 자 를 받 아들 여 방문 할 수 있 는 지 하 는 것 이다.4. 구체 적 인 요소 캐릭터 (Concrete Element): 요소 캐릭터 가 제공 하 는 Accept 작업 을 실현 합 니 다.5. 대상 구조 역할 (Object Structure): 방문 자 모드 를 사용 하 는 데 필수 적 인 역할 입 니 다.그것 은 그것 의 요 소 를 매 거 할 수 있 는 특징 을 가 져 야 한다.방문 자가 요 소 를 방문 할 수 있 도록 고 층 인 터 페 이 스 를 제공 할 수 있 습 니 다.하나의 목록 이나 무질서 한 집합 같은 복합 (조합) 또는 집합 일 수 있 습 니 다.
사례 1 방문 자 역할
public interface IVistor
{
public void visit(ConcreteElement1 e1);
public void visit(ConcreteElement2 e2);
}
2 원소 역할
public abstract class Element
{
public abstract void accept(IVistor visitor);
public abstract void doSomething();
}
3. 구체 적 인 방문 자 역할
public class Visitor implements IVistor {
@Override
public void visit(ConcreteElement1 e1)
{
e1.doSomething();
}
@Override
public void visit(ConcreteElement2 e2)
{
e2.doSomething();
}
}
4 구체 적 인 방문 자 역할
public class ConcreteElement1 extends Element {
@Override
public void accept(IVistor visitor)
{
visitor.visit(this);
}
@Override
public void doSomething()
{
System.out.println("Element1");
}
}
public class ConcreteElement2 extends Element {
@Override
public void accept(IVistor visitor)
{
visitor.visit(this);
}
@Override
public void doSomething()
{
System.out.println("Element2");
}
}
5 개체 구조 역할
public class ObjectStructure
{
public static List<Element> getList()
{
List<Element> list = new ArrayList<Element>();
Random ran = new Random();
for(int i=0;i<10;i++)
{
int a = ran.nextInt(100);
if(a>50)
list.add(new ConcreteElement1());
else
list.add(new ConcreteElement2());
}
return list;
}
}
6 테스트 코드
List<Element> list = ObjectStructure.getList();
for(Element e:list){
e.accept(new Visitor());
}
출력 결과: (약)
장단 점 장점 1. 단일 직책 원칙 에 부합 한다. 방문 자 모델 을 적용 하 는 장면 에서 요소 류 에서 방문 자 에 게 봉 해 야 하 는 조작 은 반드시 요소 류 자체 와 관계 가 크 지 않 고 변 하기 쉬 운 조작 이다. 방문 자 모델 을 사용 하 는 것 은 단일 직책 원칙 에 부합 되 고 다른 한편, 봉 인 된 조작 은 흔히 변 하기 쉬 운 것 이기 때문이다.따라서 변화 가 발생 하면 원소 류 자 체 를 바 꾸 지 않 는 전제 에서 변화 부분 에 대한 확장 을 실현 할 수 있다.2. 확장 성 이 좋다: 요소 류 는 서로 다른 방문 자 를 받 아들 여 통 하지 않 는 동작 에 대한 확장 을 실현 할 수 있다.단점: 1. 새로운 원소 류 를 늘 리 기 가 어렵다.방문 자 류 에서 모든 요소 류 는 이에 대응 하 는 처리 방법 이 있다. 즉, 하나의 요소 류 를 추가 할 때마다 방문 자 류 를 수정 해 야 하기 때문에 수정 하기 가 상당히 번거롭다.원소 류 의 수가 불확실 한 상황 에서 방문 자 모드 를 신 중 히 사용 해 야 한 다 는 것 이다.
참고 자료 1. 자바 디자인 모델 13: 방문 자 모드 (Visitor)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.