[디자인 패턴] Facade 패턴
이멀젼씨
·2020. 3. 20. 08:51
- 정의
일련의 서브시스템에 대한 통합된 인터페이스를 제공하여 여러 서브 시스템을 더 쉽게 사용할 수 있도록 해주는 패턴이다
- UML
1. Engine클래스는 엔진을 설치하는 installEngine메서드를 갖고 있다
2. Skeleton클래스는 뼈대를 생성하는 makeSkeleton메소드를 갖고 있다
3. Wheel클래스는 바퀴를 장착하는 equipWheel메소드를 갖고 있다
4. Car클래스는 생성자를 통해 각 클래스를 주입받고, makeCar메소드를 통해 makeSkeleton, installEngine, equipWheel의 메소드를 순차적으로 수행한다
- 코드
Engine class
public class Engine {
public void installEngine() {
System.out.println("엔진을 설치합니다");
}
}
Skeleton class
public class Skeleton {
public void makeSkeleton() {
System.out.println("뼈대를 생성합니다");
}
}
Wheel class
public class Wheel {
public void equipWheel() {
System.out.println("바퀴를 장착합니다");
}
}
Car class
public class Car {
private final Engine engine;
private final Skeleton skeleton;
private final Wheel wheel;
public Car() {
engine = new Engine();
skeleton = new Skeleton();
wheel = new Wheel();
}
public void makeCar() {
skeleton.makeSkeleton();
engine.installEngine();
wheel.equipWheel();
}
}
Main class
public class Main {
public static void main(String[] args) {
Car car = new Car();
car.makeCar();
}
}
출력결과
뼈대를 생성합니다
엔진을 설치합니다
바퀴를 장착합니다
- 설명
일련의 행위가 한 클래스에서 수행된다는 게 템플릿 메서드 패턴과 유사하다
다른 점이라면
템플릿 메서드 패턴은 추상 클래스에서 일련의 행위들을 한꺼번에 수행할 수 있는 메소드를 만들고, 이 추상 클래스를 상속하는 클래스는 한꺼번에 수행되는 일련의 행위들을 각각 재정의한다.
즉, 추상 클래스에서는 일련의 과정만 수행을 해주고, 각 과정의 자세한 부분은 상속받는 클래스에서 재정의가 필요하다
퍼사드 패턴은 여러 클래스(서브 시스템)에서 수행되는 행위들을 묶어 한 클래스에서 동작하게 만든다는 것이다
장점 : 사용자가 다루어야 할 서브 시스템(클래스)의 범위를 줄여주고, 결합도를 낮출 수 있다.
단점 : 사용자에게 내부의 서브 시스템까지 숨길 수 없기 때문에, 사용자가 서스 시스템 내부의 클래스를 직접 사용하는 것을 막을 수 없다. 대안으로는 Namespace를 사용하는 것이다
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] Mediator 패턴 (0) | 2020.03.23 |
---|---|
[디자인 패턴] Observer 패턴 (0) | 2020.03.22 |
[디자인 패턴] ChainOfResponsibility 패턴 (0) | 2020.03.19 |
[디자인 패턴] Visitor 패턴 (0) | 2020.03.17 |
[디자인 패턴] Decorator 패턴 (0) | 2020.03.15 |