[Design Pattern] Bridge Pattern
Bridge Pattern이란?
추상화를 구현하여 두 개가 독립적으로 변할 수 있도록
브리지 디자인 패턴의 구현은 Composition 보다 Inheritance을 선호한다는 개념을 따릅니다.
브리지 패턴(Bridge pattern)이란 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다.
Bridge Pattern의 구조
- Abstraction
- 기능 계층의 최상위 클래스.
- 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출합니다.
- RefindAbstraction
- 기능 계층에서 새로운 부분을 확장한 클래스
- Implementor
- Abstraction의 기능을 구현하기 위한 인터페이스
- ConcreteImplementor
- 실제 기능을 구현합니다.
Bridge Pattern with Java
위의 그림과 같이 인터페이스와 구현 모두에 인터페이스 계층 구조가 있다고 가정해보겠습니다.
Shape의 구현체인 Triangle, Pentagon에서 다시 Color를 라는 추상층이 존재하고 있습니다.
위와 같이 작성되어있다면 독립적으로 변형이 힘들고, 확장이 어렵겠죠
위와 같이 작성되어 있는 코드를 Bridge Pattern을 사용하여 인터페이스를 분리하도록 하겠습니다.
public interface Color {
public void applyColor();
}
public abstract class Shape {
//Composition - implementor
protected Color color;
public Shape(Color c){
this.color=c;
}
abstract public void applyColor();
}
public class Triangle extends Shape{
public Triangle(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Triangle filled with color ");
color.applyColor();
}
}
public class Pentagon extends Shape{
public Pentagon(Color c) {
super(c);
}
@Override
public void applyColor() {
System.out.print("Pentagon filled with color ");
color.applyColor();
}
}
public class RedColor implements Color{
public void applyColor(){
System.out.println("red.");
}
}
public class GreenColor implements Color{
public void applyColor(){
System.out.println("green.");
}
}
public class BridgePatternTest {
public static void main(String[] args) {
Shape tri = new Triangle(new RedColor());
tri.applyColor();
Shape pent = new Pentagon(new GreenColor());
pent.applyColor();
}
}
Bridge Pattern with Kotlin
interface Switch {
var appliance: Appliance
fun turnOn()
}
class RemoteControl(override var appliance: Appliance) : Switch {
override fun turnOn() = appliance.run()
}
interface Appliance {
fun run()
}
class TV : Appliance {
override fun run() = println("TV turned on")
}
class VacuumCleaner : Appliance {
override fun run() = println("VacuumCleaner turned on")
}
Switch가 bridge의 역할로 Appliance를 알고 있습니다.
Abstraction - Switch Class
RefindAbstraction - RemoteControl
Implementor - Appliance
ConcreteImplementor - TV,VacuumCleaner
정리
브리지 디자인 패턴을 이용함으로써 Shape는 구현체와 Color를 잇는 다리가 되었습니다.
즉 , 브리지 디자인 패턴을 이용하면
-
추상화와 구현 모두 독립적으로 다른 계층구조를 가질 수 있고
-
클라이언트 응용프로그램에서 구현을 숨길 수 있습니다.
소스코드 보러가기
https://github.com/qjatjr1108/DesignPattern
참고
https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A6%AC%EC%A7%80_%ED%8C%A8%ED%84%B4
'DesignPattern' 카테고리의 다른 글
[Design Pattern] Flyweight pattern (4) | 2019.10.10 |
---|---|
[Design Pattern] Composition Pattern (2) | 2019.10.10 |
[Design Pattern] Proxy Pattern (4) | 2019.10.08 |
[Design Pattern] Decorator Pattern (2) | 2019.10.08 |
[Design Pattern] Facade Pattern (2) | 2019.10.08 |
댓글