본문 바로가기
DesignPattern

[Design Pattern] Bridge Pattern

by 봄석 2019. 10. 10.

[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를 잇는 다리가 되었습니다.

즉 , 브리지 디자인 패턴을 이용하면

  1. 추상화와 구현 모두 독립적으로 다른 계층구조를 가질 수 있고

  2. 클라이언트 응용프로그램에서 구현을 숨길 수 있습니다.

 

 

소스코드 보러가기

https://github.com/qjatjr1108/DesignPattern

 

qjatjr1108/DesignPattern

DesignPattern Sample. Contribute to qjatjr1108/DesignPattern development by creating an account on GitHub.

github.com

 

 

참고

https://ko.wikipedia.org/wiki/%EB%B8%8C%EB%A6%AC%EC%A7%80_%ED%8C%A8%ED%84%B4

 

브리지 패턴 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 브리지 패턴(Bridge pattern)이란 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. /** "Implementor" */ interface DrawingAPI { public void drawCircle(double x, double y, double radius); } /** "ConcreteImplementor" 1/2 */ class DrawingA

ko.wikipedia.org

 

'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

댓글