꾸준한 스터디
article thumbnail

장점

- 기능 인터페이스와 구현을 담당하는 추상 클래스로 독립적으로 구성이 된다.

- 각 계층을 독립적으로 확장 및 변경이 가능해진다.

- 객체 간 결합도를 낮출 수 있다.

- 기존 설계에 새로운 요소들을 지속적으로 추가할 때 유용하다.

- 기존 코드 변경 없이 기능을 확장할 수 있다.

 

단점

- 계층 구조에 새로운 구현체 및 기능 등을 추가하다보면 설계가 복잡해질 수 있다.

 

 

설계 구조

Bridge Pattern 설계 구조

 

필기구를 추상 클래스로 선언하여 색연필, 샤프 등으로 사용하고

작성의 기능을 분리하여 선, 원, 사각형 등의 기능을 정의한다.

 

예제 코드

필기구 추상 클래스

public abstract class Pencil {
    protected Writing writing;
    
    protected Pencil(Writing writing) {
        this.writing = writing;
    }

    public abstract void writeLine();

    public abstract void writeCircle();

    public abstract void writeRectangle();
}

색연필

public class ColorPencil extends Pencil{
    private final String info = "색연필";

   public ColorPencil(Writing writing) {
       super(writing);
       System.out.println("========== "+info+" ==========");
    }

    @Override
    public void writeLine() {
        System.out.println(info + writing.line());
    }

    @Override
    public void writeCircle() {
        System.out.println(info + writing.circle());
    }

    @Override
    public void writeRectangle() {
        System.out.println(info + writing.rectangle());
    }
}

샤프

public class MechanicalPencil extends Pencil{
    private final String info = "샤프";

    public MechanicalPencil(Writing writing) {
        super(writing);
        System.out.println("========== "+info+" ==========");
    }

    @Override
    public void writeLine() {
        System.out.println(info + writing.line());
    }

    @Override
    public void writeCircle() {
        System.out.println(info + writing.circle());
    }

    @Override
    public void writeRectangle() {
        System.out.println(info + writing.rectangle());
    }
}

작성 인터페이스

public interface Writing {
    String line();

    String circle();

    String rectangle();
}

형태

public class WritingShape implements Writing{

    @Override
    public String line() {
        return "로 선을 긋습니다.";
    }

    @Override
    public String circle() {
        return "로 원을 긋습니다.";
    }

    @Override
    public String rectangle() {
        return "로 사각형을 긋습니다.";
    }
}

실행 결과

public class Main {

    public static void main(String[] args) {
        Pencil colorPencil = new ColorPencil(new WritingShape());
        colorPencil.writeLine();
        colorPencil.writeCircle();
        colorPencil.writeRectangle();

        Pencil mechanicalPencil = new MechanicalPencil(new WritingShape());
        mechanicalPencil.writeLine();
        mechanicalPencil.writeCircle();
        mechanicalPencil.writeRectangle();
    }
}

profile

꾸준한 스터디

@StudyRecord

포스팅이 유익하셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!