많은 서브 시스템을 거대한 클래스로 감싸서 외부에서는 내부 서브 시스템을 추상화한 인터페이스만 제공해준다.
각 서브 시스템이 존재한다.
public class Soap {
public void washFace() {
System.out.println("세수하기");
}
}
public class Shampoo {
public void washHair() {
System.out.println("머리감기");
}
}
public class BodyWash {
public void washBody() {
System.out.println("몸 씻기");
}
}
이 서브시스템들을 하나로 감싼다.
public class Bathroom {
private final Soap soap;
private final Shampoo shampoo;
private final BodyWash bodyWash;
public Bathroom() {
this.soap = new Soap();
this.shampoo = new Shampoo();
this.bodyWash = new BodyWash();
}
public void wash() {
soap.washFace();
shampoo.washHair();
bodyWash.washBody();
}
}
클라이언트에서는 wash만 호출하면 내부 서브시스템들이 수행된다.
public class Application {
public static void main(String[] args) {
Bathroom bathroom = new Bathroom();
bathroom.wash();
}
}