728x90
반응형
브릿지 패턴(Bridge Pattern)
객체의 확장성을 향상하기 위한 패턴으로, 동작을 처리하는 구현부와 확장을 위한 추상부로 분리합니다.
즉, 구현과 더불어 추상화 부분까지 변경해야 한다면 브릿지 패턴을 사용하면 됩니다.! 🌉
브릿지 패턴을 사용하면 추상화된 부분과 구현 부분을 서로 다른 클래스 계층구조로 분리해서 그 둘을 모두 변경할 수 있습니다.
여러 플랫폼에서 사용해야 하는 그래픽스와 윈도우 처리 시스템에서 유용하게 사용됩니다.
다시말하면, 인터페이스와 실제 구현할 부분을 서로 다른 방식으로 변경해야 할 때 유용하게 사용됩니다.
브릿지 패턴 구조
- Abstraction
- 기능 계층의 최상위 클래스
- ConcreteAbstraction
- 기능 계층에서 새로운 부분을 확장한 클래스
- Implementor
- abstract 기능을 구현하기 위한 인터페이스
- ConcrteImplementor
- 실제 기능 구현
애플워치 밴드 교체 애플리케이션
애플워치는 밴드를 사용자의 취향에 따라 교체할 수 있습니다.!
브릿지 패턴을 사용해서 이를 구현해 봅시다.!
사진 출처 : Apple (대한민국)
2개의 계층구조를 만들었습니다. 한쪽은 실리콘밴드(SiliconBand
), 한쪽은 알파인루프(AlpineLoop
) 입니다.
브릿지로 연결했으므로 양쪽을 서로 독립적으로 변경할 수 있습니다..!!
AppleWatch
public abstract class AppleWatch {
protected WatchBand watchBand;
public abstract void changeBand(WatchBand watchBand);
}
Se2
public class Se2 extends AppleWatch {
private static final String name = "se2";
@Override
public void changeBand(WatchBand watchBand) {
this.watchBand = watchBand;
System.out.println(name+" "+this.watchBand.bandName()+"로 밴드 변경합니다.");
}
}
Series8
public class Series8 extends AppleWatch {
private static final String name = "시리즈8";
@Override
public void changeBand(WatchBand watchBand) {
this.watchBand = watchBand;
System.out.println(name+" "+this.watchBand.bandName()+"로 밴드 변경합니다.");
}
}
WatchBand
public interface WatchBand {
String bandName();
}
AlpineLoop
public class AlpineLoop implements WatchBand {
private static final String name = "알파인 루프";
@Override
public String bandName() {
return name;
}
}
SiliconBand
public class SiliconBand implements WatchBand {
private static final String name = "실리콘 밴드";
@Override
public String bandName() {
return name;
}
}
Client
public class Client {
public static void main(String[] args) {
WatchBand alpineLoop = new AlpineLoop();
WatchBand siliconBand = new SiliconBand();
AppleWatch MyappleWatch = new Series8();
AppleWatch YourappleWatch = new Se2();
YourappleWatch.changeBand(alpineLoop);
MyappleWatch.changeBand(siliconBand);
YourappleWatch.changeBand(siliconBand);
MyappleWatch.changeBand(alpineLoop);
}
}
결과
se2 알파인 루프로 밴드 변경합니다.
시리즈8 실리콘 밴드로 밴드 변경합니다.
se2 실리콘 밴드로 밴드 변경합니다.
시리즈8 알파인 루프로 밴드 변경합니다.
반응형
브리지패턴의 장단점
장점
- 구현과 인터페이스를 완전히 결합하지 않았기에 구현과 추상화 부분을 분리할 수 있습니다.
- 추상화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있습니다.
- 추상화 부분을 구현한 구상 클래스가 변경되어도 클라이언트에는 영향을 끼치치 않습니다.!
단점
- 디자인이 복잡해진다는 단점이 있습니다.
728x90
반응형
'컴퓨터과학 > 0 + 소프트웨어 아키텍처(디자인 패턴)' 카테고리의 다른 글
[소프트웨어 아키텍처] 15. 어댑터 패턴, 퍼사드 패턴(Adapter Pattern, Facade Pattern -java) (1) | 2022.12.08 |
---|---|
[소프트웨어 아키텍처] 14. 데코레이터 패턴(Decorator Pattern -java) (0) | 2022.12.07 |
[소프트웨어 아키텍처] 13. 프로토타입 패턴(Prototype Pattern -java) (0) | 2022.12.07 |
[소프트웨어 아키텍처] 12. 빌더 패턴(Builder Pattern -java) (0) | 2022.12.06 |
[소프트웨어 아키텍처] 11. 싱글톤 패턴(Singleton Pattern -java) (0) | 2022.12.06 |