토비의 봄 TV 1회 Double dispatch example
토비님 방송(토비의 봄 1회 )에서 나왔던 double dispatch 예제를 정리해봅니다. Visitor 패턴도 같이 포함되어 있습니다.
public class Dispatch {
// 비지터 패턴의 Element 인터페이스
interface Post {
void postOn(SNS sns); // 비지터 패턴의 accept(visitor)
}
static class Text implements Post {
public void postOn(SNS sns) {
sns.post(this);
}
}
static class Picture implements Post {
public void postOn(SNS sns) {
sns.post(this);
}
}
// 비지터 패턴의 Visitor 인터페이스
interface SNS {
void post(Text post); // 비지터 패턴의 visit()
void post(Picture post);
}
static class Facebook implements SNS {
@Override
public void post(Text post) {
System.out.println("text-facebook");
}
@Override
public void post(Picture post) {
System.out.println("picture-facebook");
}
}
static class Twitter implements SNS {
@Override
public void post(Text post) {
System.out.println("text-twitter");
}
@Override
public void post(Picture post) {
System.out.println("picture-twitter");
}
}
public static void main(String[] args) {
List<Post> posts = Arrays.asList(new Text(), new Picture());
List<SNS> sns = Arrays.asList(new Facebook(), new Twitter());
System.out.println("# old style:");
for (Post p : posts) {
for (SNS s : sns) {
p.postOn(s);
}
}
System.out.println("# lambda style:");
// double dispatch 사용 예제
// posts.forEach((Post p) -> sns.forEach((SNS s) -> p.postOn(s)));
posts.forEach(p -> sns.forEach(s -> p.postOn(s)));
}
}
'Thinking > Study' 카테고리의 다른 글
[study] python 기본 문법 (0) | 2020.10.21 |
---|---|
[내용 정리] 토비의 봄 TV 5회 (0) | 2017.11.22 |
JAVA 8 에서 추가된 forEach 문 사용 예제 (0) | 2017.11.15 |
Apache ZooKeeper (0) | 2017.03.22 |
패턴 정리 (0) | 2015.08.24 |