import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Post> posts = Arrays.asList(new Text(), new Picture());
List<SNS> sns = Arrays.asList(new Facebook(), new Twitter(), new Instagram());
posts.forEach(post -> sns.forEach(s -> post.postOn(s)));
}
interface Post {
void postOn(SNS sns);
}
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);
}
}
interface SNS {
void post(Text text);
void post(Picture picture);
}
static class Facebook implements SNS {
public void post(Text text) {
System.out.println("FACEBOOK UPLOADING");
System.out.println("TEXT by facebook");
}
public void post(Picture picture) {
System.out.println("FACEBOOK UPLOADING");
System.out.println("PICTURE by facebook");
}
}
static class Twitter implements SNS {
public void post(Text text) {
System.out.println("TWITTER UPLOADING");
System.out.println("TEXT by twitter");
}
public void post(Picture picture) {
System.out.println("TWITTER UPLOADING");
System.out.println("PICTURE by twitter");
}
}
static class Instagram implements SNS {
public void post(Text text) {
System.out.println("INSTAGRAM UPLOADING");
System.out.println("TEXT by instagram");
}
public void post(Picture picture) {
System.out.println("INSTAGRAM UPLOADING");
System.out.println("PICTURE by instagram");
}
}
}
Text, Picture를 FaceBook, Twitter, Instagram에 post하는데
SNS를 기존 코드의 수정없이 늘릴 수 있다.(OCP)
postOn메서드에서 자기자신을 넘기는 것이 특징이다.
visitor 패턴에 사용된다고 하는데..
a type의 항목들이 있고, b type의 항목들이 있고,
두 타입이 연관이 있어서 매개변수로 같이 쓰이는데,
하나의 타입만 확장할 수 있게 한다면, 매우 좋은 방법인 것 같다.
다음에는 visitor 패턴을 봐야겠다 ㅎㅎ(사실 어딘가 책에서 보긴했지만.. 기억이 ㅠ)
https://www.youtube.com/watch?v=s-tXAHub6vg
'공부기록 > 아키텍처' 카테고리의 다른 글
클린 아키텍처 7장~11장 SOLID (0) | 2021.07.26 |
---|---|
클린 아키텍처 6장 - 함수형 프로그래밍 (0) | 2021.07.25 |
클린 아키텍처 5장 - 객체 지향 프로그래밍 (0) | 2021.07.23 |
클린 아키텍처 4장 - 구조적 프로그래밍 (0) | 2021.07.22 |
클린 아키텍처 3장 (0) | 2021.07.21 |