티스토리 뷰
브릿지 패턴 (Bridge Pattern)
구현부에서 추상층을 분리하여 각자 독립적으로 변형이 가능하고 확장이 가능하도록 합니다. 즉 기능과 구현에 대해서 두 개를 별도의 클래스로 구현을 합니다.
■ 브릿지 패턴의 구조
● Abstraction : 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현부분의 메서드를 호출합니다.
● RefindAbstraction : 기능 계층에서 새로운 부분을 확장한 클래스
● Implementor : Abstraction의 기능을 구현하기 위한 인터페이스 정의
● ConcreteImplementor : 실제 기능을 구현합니다.
■ 브릿지 패턴 예제
각 '동물'이라는 클래스와 이 동물 클래스가 가질 수 있는 '사냥방법'을 Bridge 패턴을 적용하여 각각 분리하여 설계를 해보겠습니다.
먼저 기능부에 해당하는 최상위 클래스 Animal이 존재하고 그 하위클래스로 Bird와 Tiger 클래스가 존재합니다. '동물'이라는 추상 객체의 기능 구현 부분을 Hunting_Handler와 분리하여 구조를 설계 하였습니다.
한 클래스씩 살펴보겠습니다.
Hunting_Handler.interface
동물이 가질 수 있는 '사냥 방식'들이 가져야 할 공통 인터페이스를 정의하고 있습니다.
Huntig_Method1.java , Hunting_Method2.java
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14  | 
 public class Hunting_Method1 implements Hunting_Handler { 
    public void Find_Quarry() 
    { 
        System.out.println("물 위에서 찾는다"); 
    } 
    public void Detected_Quarry() 
    { 
        System.out.println("물고기 발견!"); 
    } 
    public void attack() 
    { 
        System.out.println("낚아챈다."); 
    } 
}  | 
Hunting_Handler 인터페이스를 상속받아 실제 기능에 해당하는 부분을 구현합니다.
Animal.class
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27  | 
 public class Animal { 
    private Hunting_Handler hunting; 
    public Animal(Hunting_Handler hunting) 
    { 
        this.hunting=hunting; 
    } 
    public void Find_Quarry() 
    { 
        hunting.Find_Quarry(); 
    } 
    public void Detected_Quarry() 
    { 
        hunting.Detected_Quarry(); 
    } 
    public void attack() 
    { 
        hunting.attack(); 
    } 
    public void hunt() 
    { 
        Find_Quarry(); 
        Detected_Quarry(); 
        attack(); 
    } 
}  | 
기능 부분에 해당되는 최상위 클래스입니다. Hunting_Handler의 인스턴스를 가지고 각각의 Hunting_Handler를 상속받아 구현하고 있는 메서드들을 호출하고 있습니다.
Tiger.java , Bird.java
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14  | 
 public class Tiger extends Animal 
{ 
    public Tiger(Hunting_Handler hunting) 
    { 
        super(hunting); 
    } 
    public void hunt() 
    { 
        System.out.println("호랑이의 사냥방식"); 
        Find_Quarry(); 
        Detected_Quarry(); 
        attack(); 
    } 
}  | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14  | 
 public class Bird extends Animal 
{ 
    public Bird(Hunting_Handler hunting) 
    { 
        super(hunting); 
    } 
    public void hunt() 
    { 
        System.out.println("새의 사냥방식"); 
        Find_Quarry(); 
        Detected_Quarry(); 
        attack(); 
    } 
}  | 
Animal를 확장한 클래스입니다. 패턴을 보여주기 위해 억지적인 면은 있지만 실제로 확장의 의미로 Tiger 와 Bird만의 추가적인 기능을 가질 수도 있습니다.
(예제에서 확장의 의미로는 어느 동물의 사냥방식인지 화면에 출력해주는 정도..)
Main.java
실제 메인에서 동물 클래스를 생성하고 각각 다른 사냥 방식을 채택하는 모습입니다.
'Study > 디자인 패턴' 카테고리의 다른 글
| 09 퍼사드 패턴 (Facade Pattern) (0) | 2017.09.26 | 
|---|---|
| 08 반복자 패턴 (Iterator Pattern) (0) | 2017.09.24 | 
| 06 프록시 패턴 (Proxy Pattern) (0) | 2017.09.21 | 
| 05 어댑터 패턴 (Adapter Pattern) (0) | 2017.09.16 | 
| 04 Builder 패턴 (0) | 2017.09.14 |