파사드 디자인패턴
- 서브시스템에 있는 인터페이스 집합에 대해서 하나의 통합된 인터페이스를 제공하는 패턴으로, 서브시스템을 좀더 사용히기 편하게 만드는 상위 수준의 인터페이스를 정의한다.
클래스 설명
아래 사용방법에서 서브클래스 개수를 보면 알겠지만 파사드패턴을 사용하게 되면 서브시스템에 있는 많은 클래스를 알아야 할 필요가 없다. 이로써 사용자가 다뤄야할 객체의 수가 줄어들며, 서브시스템을 쉽게 사용할 수 있다. 또한 서브시스템과 사용자 코드 간의 결합도를 더욱 약하게 만든다. 결합이 약하면, 서브시스템 내의 요소를 다양화하는 작업을 원활하게 할 수 있다.
기존에 존재하는 클래스의 기능성을 추상화한다는 점에서 중재자 패턴과 비슷하다. 중재자 패턴의 목적은 여러 객체들 사이의 협력 관계를 추상화하여 기능성의 집중화를 막자는 것이다. 중재자 패턴에 참여하는 객체는 서로를 직접 알지 못하고 단지 중재자를 통해서만 상호작용이 된다.
퍼사다는 서브시스템 인터페이스 자체를 추상화하여 사용을 용이하게 하려는 목적을 갖는다. 즉 새로운 기능성을 추가할 수도 없고, 이런 새로운 추가 기능에 대해서는 알 수도 없다.
클래스 사용방법
//서브시스템에 직접접근
var subA: SubsystemA = new SubsystemA();
var subB: SubsystemB = new SubsystemB();
var subC: SubsystemC = new SubsystemC();
subA.doSomethingA();
subB.doSomethingB();
subC.doSomethingC();
//파사드패턴 사용
var sub: Facade = new Facade();
sub.doSomethingA();
sub.doSomethingB();
sub.doSomethingC();
클래스 구성
//파사드 인터페이스
- 클라이언트쪽에 노출시키고자 하는 메서드만 정의
package
{
public interface IFacadable
{
function doSomethingA();
function doSomethingB();
function doSomethingC();
}
}
//파사드
package
{
public class Facade implements IFacadable
{
private var _subA: SubsystemA;
private var _subB: SubsystemB;
private var _subC: SubsystemC;
public function Facade()
{
_subA = new SubsystemA();
_subB = new SubsystemB();
_subC = new SubsystemC();
}
public function doSomethingA(): void
{
subA.doSomethingA();
}
public function doSomethingB(): void
{
subB.doSomethingB();
}
public function doSomethingC(): void
{
subC.doSomethingC();
}
}
}
//서브시스템 A 클래스
package
{
public class SubsystemA
{
public function SubsystemA()
{
}
public function doSomethingA(): void
{
//내부구현 생략
}
public function doSomethingB(): void
{
//내부구현 생략
}
public function doSomethingC(): void
{
//내부구현 생략
}
}
}
//서브시스템 B 클래스
package
{
public class SubsystemB
{
public function SubsystemB()
{
}
public function doSomethingA(): void
{
//내부구현 생략
}
public function doSomethingB(): void
{
//내부구현 생략
}
public function doSomethingC(): void
{
//내부구현 생략
}
}
}
//서브시스템 C 클래스
package
{
public class SubsystemC
{
public function SubsystemC()
{
}
public function doSomethingA(): void
{
//내부구현 생략
}
public function doSomethingB(): void
{
//내부구현 생략
}
public function doSomethingC(): void
{
//내부구현 생략
}
}
}
'디자인 패턴' 카테고리의 다른 글
디자인패턴 : State (0) | 2011.08.03 |
---|---|
디자인패턴 : Template Method (0) | 2011.08.03 |
디자인패턴 : Factory Method (0) | 2011.08.03 |
디자인패턴 : Adapter (0) | 2011.08.03 |
디자인패턴 : Decorator (0) | 2011.08.03 |