목차
1. 브리지 패턴 (Bridge Pattern) 이란?
2. 브리지 패턴 구조
3. 예제
브리지 패턴 (Bridge Pattern)이란?
기능 계층과 구현 계층의 분리로 시스템의 확장성과 유지보수성을 높이는 패턴 입니다.
기능 계층과 구현 계층을 연결한다는 뜻으로 브리지 패턴이라고 불립니다.
기존 시스템에 새로운 기능을 추가해도 기능계층을 통해 기존에 작성된 작성된 코드의 변경을 최소화
또한 기존의 기능에 대해서도 구현계층을 통해 확장을 용이하게 해줍니다.
브리지 패턴 구조 (Bridge Pattern Structure)
이름 | 내용 |
DIsplay | 초안 내용을 출력을 도와줄 인터페이스 |
Draft | 초안을 적을 클래스 |
Publication | 추가 요청에 관련된 초안 클래스 |
SimpleDisplay | 간단하게 출력해줄 출력 클래스 |
CaptionDisplay | 추가 설명이 붙은 출력 클래스 |
Main | 메인 클래스 |
예제
Display 인터페이스
출력에 필요한 메서드를 정의해 둡니다.
이떄 내용들은 Draft 에서 가져올 것이기 때문에 Draft 객체를 파라미터로 넘깁니다.
public interface Display {
void title(Draft draft);
void author(Draft draft);
void content(Draft draft);
}
Draft 클래스
초안에 필요한 title, author, content 를 필드로 가집니다.
각 필드 값을 가져올 getter 를 선언합니다.
print 메서드를 구현하는데 이때 모든 출력은 Display 인터페이스를 이용합니다.
public class Draft {
private String title;
private String author;
private String[] content;
public String getTitle() {return title;}
public String getAuthor() {return author;}
public String[] getContent() {return content;}
public Draft(String title, String author, String[] content){
this.title = title;
this.author = author;
this.content = content;
}
public void print(Display display){
display.title(this);
display.author(this);
display.content(this);
}
}
SimpleDisplay 클래스
Display 인터페이스를 구현합니다.
public class SimpleDisplay implements Display{
@Override
public void title(Draft draft) {
System.out.println(draft.getTitle());
}
@Override
public void author(Draft draft) {
System.out.println(draft.getAuthor());
}
@Override
public void content(Draft draft) {
String content = draft.getContent();
for(var i=0;i<content.length;i++){
System.out.println(content[i]);
}
}
}
CaptionDisplay 클래스
Display 인터페이스를 구현합니다.
public class CaptionDisplay implements Display{
@Override
public void title(Draft draft) {
System.out.println("제목: " + draft.getTitle());
}
@Override
public void author(Draft draft) {
System.out.println("저자: " + draft.getAuthor());
}
@Override
public void content(Draft draft) {
System.out.println("내용: ");
String content = draft.getContent();
for(var i=0;i<content.length;i++){
System.out.println(" " + content[i]);
}
}
}
Main 클래스
Draft 인스턴스를 생성하여 SimpleDisplay, CaptionDisplay 로 초안을 출력합니다.
public class Main {
public static void main(String[] args) {
var title = "브리지패턴";
var author = "GOF";
String[] content = {
"브리지패턴은",
"기능계층과 구현계층을 연결해주는 디자인 패턴입니다.",
"감사합니다."
};
Draft draft = new Draft(title, author, content);
Display simpleDisplay = new SimpleDisplay();
System.out.println("SimpleDisplay");
draft.print(simpleDisplay);
System.out.println();
Display captionDisplay = new CaptionDisplay();
System.out.println("CaptionDisplay");
draft.print(captionDisplay);
}
}
실행 결과
SimpleDisplay
브리지패턴
GOF
브리지패턴은
기능계층과 구현계층을 연결해주는 디자인 패턴입니다.
감사합니다.
CaptionDisplay
제목: 브리지패턴
저자: GOF
내용:
- 브리지패턴은
- 기능계층과 구현계층을 연결해주는 디자인 패턴입니다.
- 감사합니다.
추가 요청사항
만약 출판사에서 원고 끝에 출판사와 가격을 넣어달라고 하면 어떻게 해야할까요?
브리지 패턴을 통해 구현 계층과 기능계층을 분리해두었기 때문에 구현계층만 다른 클래스로 교체해주면 간단합니다.
Publication 클래스
Draft 클래스를 상속받아 publisher, cost 등 필요한 필드를 추가합니다.
그후 print 메서드를 Override 하여 기능을 추가합니다.
public class Publication extends Draft{
private String publisher;
private int cost;
public Publication(String title, String author, String[] content,
String publisher, int cost) {
super(title, author, content);
this.publisher = publisher;
this.cost = cost;
}
private void printPublicationInfo() {
System.out.println("#" + publisher + " $" + cost);
}
@Override
public void print(Display display) {
super.print(display);
printPublicationInfo();
}
}
Main 클래스
Publication 인스턴스를 생성하여 CaptionDisplay 로 출력해보도록 하겠습니다.
public class Main {
public static void main(String[] args) {
var title = "브리지패턴";
var author = "GOF";
String[] content = {
"브리지패턴은",
"기능계층과 구현계층을 연결해주는 디자인 패턴입니다.",
"감사합니다."
};
Display captionDisplay = new CaptionDisplay();
var publsher = "테스트 출판";
var cost = 100;
Publication publication = new Publication(title, author, content,
publsher, cost);
publication.print(captionDisplay);
}
}
실행 결과
제목: 브리지패턴
저자: GOF
내용:
- 브리지패턴은
- 기능계층과 구현계층을 연결해주는 디자인 패턴입니다.
- 감사합니다.
#테스트 출판 $100
참조
https://www.youtube.com/watch?v=IJ96VeNPTyM&t=4s
'Design Pattern > 구조(Structural) 패턴' 카테고리의 다른 글
11. 방문자 패턴 Visitor Pattern (1) | 2023.11.12 |
---|---|
10. 데코레이터 패턴 / Decorator Pattern (0) | 2023.11.08 |
8. 프록시 패턴 / Proxy Pattern (1) | 2023.11.03 |
4. 컴포지트 패턴 (Composite Pattern) (0) | 2023.10.30 |
3. 어댑터 패턴 (Adapter Pattern) (0) | 2023.10.29 |