브릿지 패턴 (Bridge Pattern)

구교석·2024년 3월 14일
post-thumbnail

브릿지 패턴 (Bridge Pattern)은 구조 패턴 중 하나로 이는 소프트웨어에서 특정한 문제를 해결하기 위해 반복적으로 발생하는 구조를 식별하고, 그 구조에 따라 일반화된 해결책을 제시하는 것을 의미합니다

브릿지 패턴이란?

이름에서 유추할 수 있듯이 브릿지 패턴의 브릿지는 우리가 흔히 아는 다리를 뜻한다.
다리란 두 지점을 연결하는 구조물로 브릿지 패턴은 큰 클래스 또는 밀접하게 관련된 클래스들의 집합을 두 개의 개별 계층구조​(추상화 및 구현)​로 나눈 후 각각 독립적으로 개발할 수 있도록 하는 구조 디자인 패턴입니다.

브릿지 패턴 구조

● Abstraction : 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출합니다.

● RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스

● Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의

● ConcreteImplementor : 실제 기능을 구현합니다.

브릿지 패턴 코드

인터페이스

public interface Widget {
    public void draw();
    public void onClick();
}

구현 클래스

public class Button implements Widget {
    private String label;

    public Button(String label) {
        this.label = label;
    }

    @Override
    public void draw() {
        System.out.println("Button - Drawn");
    }

    @Override
    public void onClick() {
        System.out.println("Button - Clicked");
    }

    public String getLabel() {
        return label;
    }
}
public class Label implements Widget {
    private String text;

    public Label(String text) {
        this.text = text;
    }

    @Override
    public void draw() {
        System.out.println("Label - Drawn");
    }

    @Override
    public void onClick() {
        System.out.println("Label - Clicked");
    }

    public String getText() {
        return text;
    }
}

추상화 클래스

public abstract class Window {
    protected Widget widget;

    public Window(Widget widget) {
        this.widget = widget;
    }

    public void draw() {
        System.out.println("Window - Drawing");
        widget.draw();
    }

    public void onClick() {
        System.out.println("Window - Handling click event");
        widget.onClick();
    }

    public abstract void render();
}
public class Dialog extends Window {
    public Dialog(Widget widget) {
        super(widget);
    }

    @Override
    public void render() {
        System.out.println("Dialog - Rendering");
        draw();
        onClick();
    }
}

클라이언트

public class Main {
    public static void main(String[] args) {
        Widget button = new Button("OK");
        Widget label = new Label("Hello, World!");

        Window dialog1 = new Dialog(button);
        Window dialog2 = new Dialog(label);

        dialog1.render();
        dialog2.render();
    }
}

참고 사이트


브리지 패턴
[Design Pattern] Bridge(브릿지) 패턴이란?

profile
끊임없이 노력하는 개발자

0개의 댓글