# Visitor Pattern

<figure><img src="https://3202568828-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgVNjdXkr3ciD8p5jXPCI%2Fuploads%2FdIDxHYLfryDUmh55ee4x%2Fimage.png?alt=media&#x26;token=598da2ad-92a4-4e4f-b292-c9eef000e270" alt=""><figcaption></figcaption></figure>

예시코드

```java
public interface Visitor {
	public void visit(Subject sub);
}
```

```java
public class MyVisitor implements Visitor {
 
	@Override
	public void visit(Subject sub) {
		System.out.println("visit the subject："+sub.getSubject());
	}
}
```

```java
public interface Subject {
	public void accept(Visitor visitor);
	public String getSubject();
}
```

```java
public class MySubject implements Subject {
 
	@Override
	public void accept(Visitor visitor) {
		visitor.visit(this);
	}
 
	@Override
	public String getSubject() {
		return "love";
	}
}
```

```java
public class Test {
 
	public static void main(String[] args) {
		
		Visitor visitor = new MyVisitor();
		Subject sub = new MySubject();
		sub.accept(visitor);	
	}
}
```
