DESIGN PATTERN

[디자인패턴] 브릿지패턴(Bridge Pattern) 이란? - 개발자 배찌

개발자 배찌 2022. 4. 7. 21:04
728x90

브릿지패턴이란?

Bridge(=다리).. 서로 떨어져 있는 두 장소를 이어주는 역할
이것이 Bridge 패턴의 핵심!!

구현과 기능에 대해 두개의 별도 클래스로 구현한다.



😊코드로 알아봅시다!

<구현>
Noodle -> 추상클래스
Ramen -> Noodle 을 상속받는 클래스
Pasta -> Noodle 을 상속받는 클래스 (밑에 코드에 구현하진 않았음)
....등등 구현객체들..이 있겠죠..

<기능>
NoodleTypeHandler -> 인터페이스
NoodleTypeIsRamen -> 라면 기능 구현클래스
NoodleTypeisPasta -> 파스타 기능 구현클래스 (코드에 구현하진 않았음)
.....등등 기능객체들....이 있겠죠

Noodle.java

package study.BridgePattern.code1;

import lombok.extern.slf4j.Slf4j;

@Slf4j
abstract public class Noodle {
    private NoodleTypeHandler noodleType;

    public Noodle(NoodleTypeHandler noodleType){
        this.noodleType = noodleType;
    }

    abstract public void typeOfNoodle();

    public void putWater(){
        noodleType.putNoodle();
    }
    public void putNoodle(){
        noodleType.putNoodle();
    }
    public void putSource(){
        noodleType.putSource();
    }
    public void boil(){
        noodleType.boil();
    }

}


Ramen.java

package study.BridgePattern.code1;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Ramen extends Noodle{

    public Ramen(NoodleTypeHandler noodleType) {
        super(noodleType);
    }

    @Override
    public void typeOfNoodle() {
        log.info("면 종류는 라면입니다.");
        super.putWater();
        super.putNoodle();
        super.putSource();
        super.boil();
    }
}


NoodleTypeHandler.java

package study.BridgePattern.code1;

public interface NoodleTypeHandler {
    void putWater();
    void putNoodle();
    void putSource();
    void boil();
}


NoodleTypeIsRamen.java

package study.BridgePattern.code1;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class NoodleTypeIsRamen implements NoodleTypeHandler{
    @Override
    public void putWater() {
        log.info("라면 물을 넣는다");
    }

    @Override
    public void putNoodle() {
        log.info("라면 면을 넣는다");
    }

    @Override
    public void putSource() {
        log.info("라면 스프를 넣는다");
    }

    @Override
    public void boil() {
        log.info("3분간 팔팔 끓인다");
    }
}


BridgePatternTest.java

package study.BridgePattern;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.BridgePattern.code0.Animal;
import study.BridgePattern.code0.Bird;
import study.BridgePattern.code0.HuntingMethod1;
import study.BridgePattern.code1.Noodle;
import study.BridgePattern.code1.NoodleTypeIsRamen;
import study.BridgePattern.code1.Ramen;

@Slf4j
public class BridgePatternTest {
    @Test
    void code1test(){
        Noodle ramen = new Ramen(new NoodleTypeIsRamen());
        ramen.typeOfNoodle();
    }

}


결과값

면 종류는 라면입니다.
라면 면을 넣는다
라면 면을 넣는다
라면 스프를 넣는다
3분간 팔팔 끓인다