This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| design_pattern:visitor_pattern [2017/10/31 08:59] – [Visitor] ledyx | design_pattern:visitor_pattern [2021/02/07 03:30] (current) – [Visitor Pattern] ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| = Visitor Pattern = | = Visitor Pattern = | ||
| - | 객체 구조를 돌아다니면서 동일한 조작을 반복해서 적용하기. 이 때, ' | + | 객체 구조를 돌아다니면서 동일한 조작을 반복해서 적용하기. 이 때, ' |
| * 언제 사용하는가? | * 언제 사용하는가? | ||
| * 데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 __다른 종류의 <fc red> | * 데이터 구조 안에 많은 요소가 저장되어 있고, 그 각 요소에 대해서 __다른 종류의 <fc red> | ||
| + | * 이로써 얻는 이점으로 객체 구조와 처리 역할을 독립적으로 확장 가능! | ||
| - | {{tag> | + | {{tag> |
| - | * 시나리오 | + | 시나리오 |
| - | * [[composite pattern]]의 예제인 " | + | * [[composite pattern]]의 예제인 " |
| Line 94: | Line 95: | ||
| } | } | ||
| + | /* 객체 구조의 각 요소에 특정한 처리를 실행하는 데 필요 */ | ||
| /* Directory에서만 유효 */ | /* Directory에서만 유효 */ | ||
| public Iterator< | public Iterator< | ||
| Line 191: | Line 193: | ||
| } | } | ||
| } | } | ||
| + | </ | ||
| + | |||
| + | <sxh java ; collapse: | ||
| + | package element.objectstructure.exception; | ||
| + | |||
| + | public class FileTreatmentException extends RuntimeException { | ||
| + | public FileTreatmentException() { | ||
| + | } | ||
| + | |||
| + | public FileTreatmentException(String message) { | ||
| + | super(message); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | = Client = | ||
| + | <sxh java ; highlight: | ||
| + | import element.objectstructure.concrete.Directory; | ||
| + | import element.objectstructure.concrete.File; | ||
| + | import visitor.concrete.ListVisitor; | ||
| + | |||
| + | public class Client { | ||
| + | public static void main(String[] args) { | ||
| + | Directory rootdir = new Directory(" | ||
| + | Directory bindir = new Directory(" | ||
| + | Directory tmpdir = new Directory(" | ||
| + | Directory usrdir = new Directory(" | ||
| + | rootdir.add(bindir); | ||
| + | rootdir.add(tmpdir); | ||
| + | rootdir.add(usrdir); | ||
| + | |||
| + | bindir.add(new File(" | ||
| + | bindir.add(new File(" | ||
| + | | ||
| + | rootdir.accept(new ListVisitor()); | ||
| + | } | ||
| + | } | ||
| + | |||
| + | /* | ||
| + | / root (3) | ||
| + | /root / bin (2) | ||
| + | /root/bin / vi (10000) | ||
| + | /root/bin / latex (20000) | ||
| + | /root / tmp (0) | ||
| + | /root / usr (0) | ||
| + | */ | ||
| </ | </ | ||