만화에서 알 수 있는 Visitor

1824 단어 디자인 패턴GoF


언제나 신세를지고 있는 상사씨에게, 메모리쨩 산타로부터 크리스마스 전도해 몰래 거리 콘의 안내를 선물. 라고 생각하면, 이케보 CD는 다른 솔루션도 왔습니다. 그런데, 코미토씨는 어떤 크리스마스를 보내는 것일까.
(다음날 "나... 이런 힘든 캐릭터인가?")

조작 대상이 조작의 상세를 결정할 수 없을 때, Visitor 를 받아들일 수 있도록(듯이) 해 두면, 조작의 상세를 제외하고 먼저 안정시켜 버린다는 것이 이 패턴입니다. 하고 싶은 것에 대한 자세한 내용은 나중에 다른 패키지로 만들 수 있습니다. 역시 여기에서도 DIP입니다.

코미토 씨는 가드가 너무 굳어 안정되어 버리고 있지만, 꿈꾸는 처녀의 마음(베개원에 양말)을 implements 하고 있기 때문에, 스스로 자신을 바꾸지 않으면 노력하지 않아도, Visitor 가 있으면 자고 하는 동안에 괜찮은 일을 받을 수 있습니다.

자고있는 동안 선물을주는 산타 클로스는 Visitor 패턴의 전형적인 예입니다.

산타클로스의 인스턴스는 크리스마스 이브의 밤에 전세계의 좋은 아이의 밑에 방문해, 양말에 살짝 선물을 인젝션 하고는, 누구에게도 모르게 떠나 갑니다. 집에 들어왔다고 해서 그 행동에 개입하지 않는 것이 약속입니다. 한밤중까지 일어나고 있어 산타를 향해 getToys()
굴뚝이 Visitor를 받아들이는 accept(Visitor v) 메서드가 됩니다. 그 인수로서 침입한 산타클로스가 공개하고 있는 메소드는 visit(Target t) 만. 그 중에서 무엇이 이루어지는지는 산타클로스 인스턴스에 맡깁니다. 코미토 씨가 정말로 원하는 선물을 넣어 주었는지는 ... 뭐 산타에 따릅니다만.

코미토는 자고 있기 때문에 방문자는 보존되지 않습니다. 적용되는 대상에서 보면, Visitor 가 어디에 살고 있는지는 모르지만, 어디에서나 메소드의 인수로서 와서 잘 해 주고, return 후에는 양말에 선물이 들어가 있을 뿐.

다른 행동에 관한 패턴과 다른 특징이 여기입니다. Visitor가 함수이고 대상이 집합이면 해당 집합의 Iterator는 acccept 한 visitor의 visit에 각 요소를 전달합니다.
[1, 2, 3].map(function(n){ return n + 1; })
왠지 친숙한 형태가 되었습니다. 클래스와 인터페이스로 생각하면 조금 의존이 다소 어렵습니다만, 여러가지 끝 접어 몹시 대잡파라고 하면, 뭐 이런 느낌입니다. 안정된 객체에 나중에 하고 싶은 것을 쏟아주는 것입니다.

다만, 산타에게 무엇이든 하고 싶다고 해서, 너무 오픈하면 도둑에게 받을지도 모릅니다.

통상의 외부로부터의 액세스에 대해서는, 메소드가 적은 추상형으로 공개해 두어, 산타만이 통과할 수 있다 accept() 를 통과하면 거기서 처음으로, 모르는)가 밝혀지는 같은 궁리를 할 수 있습니다.

드디어 내일은 크리스마스 이브군요. Visitor에게 visit 하도록(듯이), 좋은 아이 (우수한 프로그래머) 모두는 accept 를 구현해 (일일이 대상을 변경하지 않아도, 조작을 나중에 결정할 수 있는 설계를 해) 기다려 주세요.

좋은 웹페이지 즐겨찾기