[디자인 패턴] Bridge 패턴
이멀젼씨
·2020. 3. 12. 13:37
- 정의
구현으로부터 추상레이어(기능)를 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다
즉, 구현과 기능을 분리하여 구현한다
- UML
1. Making인테스페이스를 만들고 이를 구현하는 MakingApartment와 MakingVilla클래스를 만든다.
2. House추상클래스를 만들고 이를 상속하는 Apartment와 Villa클래스를 만든다
- 코드
Making interface
public interface Making {
public void buildSkeleton();
public void cementWall();
}
MakingApartment class
public class MakingApartment implements Making{
@Override
public void buildSkeleton() {
System.out.println("아파트 뼈대 짓기");
}
@Override
public void cementWall() {
System.out.println("아파트 벽에 시멘트 바르기");
}
}
MakingVilla class
public class MakingVilla implements Making{
@Override
public void buildSkeleton() {
System.out.println("빌라 뼈대 짓기");
}
@Override
public void cementWall() {
System.out.println("빌라 벽에 시멘트 바르기");
}
}
House abstract class
public abstract class House {
private Making making;
public House(Making making) {
this.making = making;
}
public void buildSkeleton() {
making.buildSkeleton();
}
public void cementWall() {
making.cementWall();
}
public abstract void make();
}
Apartment class
public class Apartment extends House {
public Apartment(Making making) {
super(making);
}
@Override
public void make() {
System.out.println("이 건물은 아파트 입니다");
}
}
Villa class
public class Villa extends House {
public Villa(Making making) {
super(making);
}
@Override
public void make() {
System.out.println("이 건물은 빌라 입니다");
}
}
Main class
public class Main {
public static void main(String[] args) {
House apartment = new Apartment(new MakingApartment());
House villa = new Villa(new MakingVilla());
apartment.buildSkeleton();
apartment.cementWall();
apartment.make();
villa.cementWall();
villa.buildSkeleton();
villa.make();
}
}
- 설명
구현부와 추상레이어를 분리하여 클래스의 계층 구조를 파악하기 쉽게 만들었다
장점
- 결합도를 낮춰 프로그램의 확장이 편리해짐
Strategy패턴과 유사해 보이지만 차이점이 있다
Strategy패턴
전략이 빈번히 변경되거나 구현이 여러개 존재할 경우 사용
구현부의 잦은 교체를 고려한 패턴
Bridege패턴
구현과 추상레이어를 분리시켜 서로간의 의존성을 낮추는 경우에 사용
계층 분리에 초점이 맞춰짐
계층간의 의존성을 낮추는데 목적이 있음
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] Decorator 패턴 (0) | 2020.03.15 |
---|---|
[디자인 패턴] Composite 패턴 (0) | 2020.03.13 |
[디자인 패턴] AbstractFactory 패턴 (0) | 2020.03.11 |
[디자인 패턴] Builder 패턴 (0) | 2020.03.10 |
[디자인 패턴] ProtoType 패턴 (0) | 2020.02.11 |