개념
객체 지향 프로그래밍의 관점에서 객체들은 재사용을 위해 최소 단위로 분리된다. 클라이언트의 관점에서 이들 중 일부 클래스는 인터페이스 작동이 복잡하여 코드 작성 과정에서 강한 결합 문제가 발생하거나 함께 사용해야 하는 클래스를 일일히 신경쓰게 만든다.
파사드 패턴은 이런 문제, 클라이언트에서 최소 단위 클래스 사용의 추상화를 위해 사용한다.
그 방식은 최소 단위 클래스의 사용조합을 일종의 클래스 메서드로 정의한다.
구현
서브시스템 클래스
파사드 패턴에서 실제로 작동하는 최소 단위 로직의 클래스다.
public class Computer {
private boolean turnOn;
public void turnOn() {
this.turnOn = true;
System.out.println("컴퓨터 키기");
}
public void turnOff() {
this.turnOn = false;
System.out.println("컴퓨터 끄기");
}
public boolean isTurnOn() {
return this.turnOn;
}
}
public class Light {
private boolean turnOn;
public void turnOn() {
this.turnOn = true;
System.out.println("라이트 키기");
}
public void turnOff() {
this.turnOn = false;
System.out.println("라이트 끄기");
}
public boolean isTurnOn() {
return this.turnOn;
}
}
public class Radio {
private boolean turnOn;
public void turnOn() {
this.turnOn = true;
System.out.println("라디오 키기");
}
public void turnOff() {
this.turnOn = false;
System.out.println("라디오 끄기");
}
public boolean isTurnOn() {
return this.turnOn;
}
}
파사드
서브시스템 클래스를 조합하여 추상화된 인터페이스를 제공한다.
public class FasadHome {
private Computer computer;
private Light light;
private Radio radio;
public FasadHome(Computer computer, Light light, Radio radio) {
super();
this.computer = computer;
this.light = light;
this.radio = radio;
}
public void homeIn() {
System.out.println("집 안에 가전기구를 키는 작업 시작");
if (!computer.isTurnOn()) {
computer.turnOn();
}
if(!light.isTurnOn()) {
light.turnOn();
}
if(!radio.isTurnOn()) {
radio.turnOn();
}
}
public void homeOut() {
System.out.println("집 안에 가전기구를 끄는 작업 시작");
if(computer.isTurnOn()) {
computer.turnOff();
}
if(light.isTurnOn()) {
light.turnOff();
}
if(radio.isTurnOn()) {
radio.turnOff();
}
}
}
클라이언트 코드
파사드 인스턴스를 생성하고 서브시스템 클래스를 세팅해줌으로써 간단하게 서브시스템 로직의 조합을 사용할 수 있다.
public class FasadHome {
private Computer computer;
private Light light;
private Radio radio;
public FasadHome(Computer computer, Light light, Radio radio) {
super();
this.computer = computer;
this.light = light;
this.radio = radio;
}
public void homeIn() {
System.out.println("집 안에 가전기구를 키는 작업 시작");
if (!computer.isTurnOn()) {
computer.turnOn();
}
if(!light.isTurnOn()) {
light.turnOn();
}
if(!radio.isTurnOn()) {
radio.turnOn();
}
}
public void homeOut() {
System.out.println("집 안에 가전기구를 끄는 작업 시작");
if(computer.isTurnOn()) {
computer.turnOff();
}
if(light.isTurnOn()) {
light.turnOff();
}
if(radio.isTurnOn()) {
radio.turnOff();
}
}
}
'코드 디자인 패턴 > java' 카테고리의 다른 글
[java & 디자인 패턴] Bridge 패턴 정리 (0) | 2024.07.17 |
---|---|
[java & 디자인 패턴] Decorator 패턴 정리 (0) | 2024.07.17 |
[java & 디자인 패턴] Adapter 패턴 정리 (0) | 2024.07.14 |
[java & 디자인 패턴] Observer 패턴 학습 정리 (0) | 2024.07.14 |
[java & 디자인 패턴] Builder 패턴 학습 정리 (0) | 2024.07.14 |