본문 바로가기
프로그래밍/디자인 패턴(프로그래밍)

[Design Pattern]Bridge Pattern이란?

by 그래도동 2019. 1. 18.
728x90
반응형

Bridge Pattern이란?

 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게하는 패턴이다.

 클래스를 다른 인터페이스로 변형시키는 면에서 adapter pattern과 유사함.

 상속을 이용한 패턴으로 확장 설계에 용이하다.

 요청하는 부분의 코드 수정 없이 실제 구현부분의 수정을 가능하게 만든다. 


예제


TV interface

1
2
3
4
5
6
7
public interface ITV {
    public void on();
 
    public void off();
 
    public void switchChannel(int channel);
}
cs


ITV interface를 implements한 클래스 1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class SamsungTV implements ITV {
 
    public void on() {
        System.out.println("Samsung TV is turned on");
    }
 
    public void off() {
        System.out.println("Samsung TV is turned off");
    }
 
    public void switchChannel(int channel) {
        System.out.println("Samsung: channel - " + channel);
    }
 
}
cs


ITV interface를 implements한 클래스 2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class LGTV implements ITV {
 
    public void on() {
        System.out.println("LG TV is turned on");
    }
 
    public void off() {
        System.out.println("LG TV is turned off");
    }
 
    public void switchChannel(int channel) {
        System.out.println("LG: channel - " + channel);
    }
 
}
cs


ITV를 이용한 추상클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public abstract class AbstractRemoteControl {
    private ITV tv;
 
    public AbstractRemoteControl(ITV tv) {
        this.tv = tv;
    }
 
    public void turnOn() {
        tv.on();
    }
 
    public void turnOff() {
        tv.off();
    }
 
    public void setChannel(int channel) {
        tv.switchChannel(channel);
    }
}
cs


추상클래스를 이용해 구현한 클래스

1
2
3
4
5
6
7
8
9
10
11
public class LogitechRemoteControl extends AbstractRemoteControl {
 
    public LogitechRemoteControl(ITV tv) {
        super(tv);
    }
 
    public void setChannelKeyboard(int channel) {
        setChannel(channel);
        System.out.println("Logitect use keyword to set channel");
    }
}
cs


메인클래스

1
2
3
4
5
6
7
8
public class BridgeMain {
    public static void main(String args[]) {
        ITV tv = new LGTV();
        LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
        lrc.setChannelKeyboard(100);
    }
}
 
cs


예제는 reference 블로그에 나와있는 것을 그대도 가져왔습니다.


Reference

 http://palpit.tistory.com/197

728x90
반응형

댓글