티스토리 뷰
브릿지 패턴 (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 |