[Design Pattern] 구조 패턴 5. 브리지 (Bridge)
Table of Contents
브리지 (Bridge) #
- 구현 부분(플랫폼) 과 추상화 부분(인터페이스) 을 각각 독립적으로 분리 하여서 서로 영향을 주지 않고 내부적으로 확장할 수 있게 한다.
- 예를 들면, 추상화 부분이란 APP의 GUI라고 볼 수 있고, 구현 부분이란 OS의 API라고 볼 수 있다.
개념적인 예시 #
// 추상화 부분
class Abstraction
{
protected IImplementation _implementation;
public Abstraction(IImplementation implementation)
{
this._implementation = implementation;
}
public virtual string Operation()
{
return "Abstract: Base operation with:\n" +
_implementation.OperationImplementation();
}
}
// 구현 부분을 건드리지 않고 추상화 부분을 확장할 수 있다.
class ExtendedAbstraction : Abstraction
{
public ExtendedAbstraction(IImplementation implementation) : base(implementation)
{
}
public override string Operation()
{
return "ExtendedAbstraction: Extended operation with:\n" +
base._implementation.OperationImplementation();
}
}
// 구현 부분
public interface IImplementation
{
string OperationImplementation();
}
class ConcreteImplementationA : IImplementation
{
public string OperationImplementation()
{
return "ConcreteImplementationA: The result in platform A.\n";
}
}
class ConcreteImplementationB : IImplementation
{
public string OperationImplementation()
{
return "ConcreteImplementationA: The result in platform B.\n";
}
}
class Client
{
// 클라이언트는 추상화 부분으로 접근할 수 있다.
public void ClientCode(Abstraction abstraction)
{
Console.Write(abstraction.Operation());
}
}
class Program
{
static void Main(string[] args)
{
Client client = new Client();
Abstraction abstraction;
// 구현 부분과 추상화 부분이 독립적으로 상호 교환될 수 있다.
abstraction = new Abstraction(new ConcreteImplementationA());
client.ClientCode(abstraction);
abstraction = new ExtendedAbstraction(new ConcreteImplementationB());
client.ClientCode(abstraction);
}
}