티스토리 뷰
728x90
1. 의미
- 추상적인 것과 구체적인 것을 분리하여 연결하는 패턴
- 하나의 계층 구조일 때보다 각기 나누었을 때 독립적인 계층 구조를 발전시킬 수 있다.
2. 예제
2.1. 하나의 계층 구조
public interface Champion {
void move();
void skillQ();
void skillW();
void skillE();
void skillR();
}
public class KDAAri implements Champion {
@Override
public void move() {
System.out.println("KDA Ari move");
}
@Override
public void skillQ() {
System.out.println("KDA Ari Q");
}
@Override
public void skillW() {
System.out.println("KDA Ari W");
}
@Override
public void skillE() {
System.out.println("KDA Ari E");
}
@Override
public void skillR() {
System.out.println("KDA Ari R");
}
}
2.2. 독립적인 계층 구조
public class DefaultChampion implements Champion {
private Skin skin;
private String name;
public DefaultChampion(Skin skin, String name) {
this.skin = skin;
this.name = name;
}
@Override
public void move() {
System.out.printf("%s %s move\n", skin.getName(), this.name);
}
@Override
public void skillQ() {
System.out.printf("%s %s Q\n", skin.getName(), this.name);
}
@Override
public void skillW() {
System.out.printf("%s %s W\n", skin.getName(), this.name);
}
@Override
public void skillE() {
System.out.printf("%s %s E\n", skin.getName(), this.name);
}
@Override
public void skillR() {
System.out.printf("%s %s R\n", skin.getName(), this.name);
}
}
public interface Skin {
String getName();
}
public class KDA implements Skin {
@Override
public String getName() {
return "KDA";
}
}
public class Ari extends DefaultChampion {
public Ari(Skin skin) {
super(skin, "Ari");
}
}
public class Client {
public static void main(String[] args) {
// 하나의 계층구조
Champion integratedKdaAri = new KDAAri();
integratedKdaAri.skillQ();
integratedKdaAri.skillR();
// 분리된 계층구조
Champion seperatedKdaAri = new Ari(new KDA());
seperatedKdaAri.skillQ();
seperatedKdaAri.skillW();
}
}
3. 장점 및 단점
3.1. 장점
- 추상적인 코드를 구체적인 코드 변경없이도 독립적으로 확장할 수 있다.
- 추상적인 코드와 구체적인 코드를 분리할 수 있다.
3.2. 단점
- 계층 구조가 늘어나 복잡도가 증가할 수 있다.
위글은 인프런의 코딩으로 학습하는 GoF의 디자인 패턴강의를 정리하였습니다.
백기선님의 수락으로 정리하였으며 더 자세한 내용은 강의를 수강하시기 바랍니다.
https://www.inflearn.com/course/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4/dashboard
728x90
'디자인 패턴' 카테고리의 다른 글
09. 데코레이터 패턴 (0) | 2022.02.10 |
---|---|
08. 컴포짓 패턴 (0) | 2022.02.10 |
06. 어댑터 패턴 (0) | 2022.02.10 |
05. 프로토타입 패턴 (0) | 2022.02.10 |
04. 빌더패턴 (0) | 2022.02.10 |
댓글