[행위 패턴] Visitor pattern (비지터 패턴)
다양한 객체에 새로운 기능을 추가해야 하는데 캡슐화가 별로 중요하지 않은 경우
(원본 출처 : https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)
Visitor 패턴에서는 요소 클래스의 실행 알고리즘을 변경하는 visitor 클래스를 사용합니다. 이러한 방식으로, 요소의 실행 알고리즘은 방문자가 다양 할 때 달라질 수 있습니다. 이 패턴은 행동 패턴 카테고리에 포함됩니다. 패턴에 따라 요소 객체는 방문자 객체가 요소 객체에 대한 작업을 처리하도록 방문자 객체를 받아 들여야합니다.
Implementation
Accept opearation을 정의하는 ComputerPart 인터페이스를 만들겠습니다. 키보드, 마우스, 모니터 및 컴퓨터는 ComputerPart 인터페이스를 구현하는 구체적인 클래스입니다. 방문자 클래스 작업을 정의 할 다른 인터페이스 인 ComputerPartVisitor를 정의 할 것입니다. 컴퓨터는 구체적인 방문자를 사용하여 해당 작업을 수행합니다.
VisitorPatternDemo, 우리 데모 클래스는 Computer, ComputerPartVisitor 클래스를 사용하여 방문자 패턴의 사용을 시연합니다.
Step 1
요소를 나타내는 인터페이스를 정의하십시오.
ComputerPart.java
public interface class ComputerPart { public void accept(ComputerPartVisitor computerPartVisitor); }
Step 2
위의 클래스를 확장하는 구체적인 클래스를 만듭니다.
Keyboard.java
public class Keyboard implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Monitor.java
public class Monitor implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Mouse.java
public class Mouse implements ComputerPart { @Override public void accept(ComputerPartVisitor computerPartVisitor) { computerPartVisitor.visit(this); } }
Computer.java
public class Computer implements ComputerPart { ComputerPart[] parts; public Computer(){ parts = new ComputerPart[] {new Mouse(), new Keyboard(), new Monitor()}; } @Override public void accept(ComputerPartVisitor computerPartVisitor) { for (int i = 0; i < parts.length; i++) { parts[i].accept(computerPartVisitor); } computerPartVisitor.visit(this); } }
Step 3
방문자를 나타내는 인터페이스를 정의하십시오.
ComputerPartVisitor.java
public interface ComputerPartVisitor { public void visit(Computer computer); public void visit(Mouse mouse); public void visit(Keyboard keyboard); public void visit(Monitor monitor); }
Step 4
위의 클래스를 구현하는 구체적인 방문자를 만듭니다.
ComputerPartDisplayVisitor.java
public class ComputerPartDisplayVisitor implements ComputerPartVisitor { @Override public void visit(Computer computer) { System.out.println("Displaying Computer."); } @Override public void visit(Mouse mouse) { System.out.println("Displaying Mouse."); } @Override public void visit(Keyboard keyboard) { System.out.println("Displaying Keyboard."); } @Override public void visit(Monitor monitor) { System.out.println("Displaying Monitor."); } }
Step 5
컴퓨터 파트를 표시하려면 ComputerPartDisplayVisitor를 사용하십시오.
VisitorPatternDemo.java
public class VisitorPatternDemo { public static void main(String[] args) { ComputerPart computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); } }
Step 6
결과를 확인합니다.
Displaying Mouse. Displaying Keyboard. Displaying Monitor. Displaying Computer.
'Development > Java' 카테고리의 다른 글
[행위 패턴] Null Object pattern (널 오브젝트 패턴) (0) | 2017.04.13 |
---|---|
[구조 패턴] Filter/Criteria pattern (필터 패턴) (0) | 2017.04.13 |
[생성 패턴] Prototype pattern (프로토타입 패턴) (0) | 2017.03.26 |
[행위 패턴] Memento pattern (메멘토 패턴) (0) | 2017.03.26 |
[행위 패턴] Mediator pattern (미디에이터 패턴) (0) | 2017.03.26 |