본문 바로가기

Thinking/Study

[내용 정리] 토비의 봄 TV 1회 Double dispatch example

728x90

토비의 봄 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