복잡한 과정을 간단하게 제공
Intent
Facade is a structural design pattern that provides a simplified interface to a library, a framework, or any other complex set of classes.
Implementation

Applicablity
- 복잡한 Subsystem의 인터페이스를 제한하고 싶을때
- Subsystem을 계층 구조로 나타내고 싶을때
Examples
javax.faces.context.ExternalContext
uses ServletContext
, HttpSession
, HttpServletRequest
, HttpServletResponse
and others inside.Code Exampl
package oodesign.design.structural.facade.subsystem; class HelpSystem01 { public HelpSystem01(){ System.out.println("call constructor: "+getClass().getSimpleName()); } public void proc(){ System.out.println("call proc: "+getClass().getSimpleName()); } } class HelpSystem02 { public HelpSystem02(){ System.out.println("call constructor: "+getClass().getSimpleName()); } public void proc(){ System.out.println("call proc: "+getClass().getSimpleName()); } } class HelpSystem03 { public HelpSystem03(){ System.out.println("call constructor: "+getClass().getSimpleName()); } public void proc(){ System.out.println("call proc: "+getClass().getSimpleName()); } }
package oodesign.design.structural.facade.subsystem; public class Facade { private HelpSystem01 helpSystem01; private HelpSystem02 helpSystem02; private HelpSystem03 helpSystem03; public Facade(){ helpSystem01 = new HelpSystem01(); helpSystem02 = new HelpSystem02(); helpSystem03 = new HelpSystem03(); } public void proc(){ helpSystem01.proc(); helpSystem02.proc(); helpSystem03.proc(); } }
package oodesign.design.structural.facade; public class Main { public static void main(String[] args) { new Facade().proc(); } }
Facade
가 package-private
으로 정의된 HelpSystemN
클래스에 대한 입구를 제공해줌Specific problems
- Facade는 일반적으로 Singleton 으로 제공되는것이 좋다.