HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📝
남득윤 학습 저장소
/
객체 지향 프로그래밍
객체 지향 프로그래밍
/
디자인 패턴
디자인 패턴
/
🏛️
Facade Pattern
🏛️

Facade Pattern

💡
복잡한 과정을 간단하게 제공

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

notion image

Applicablity

  • 복잡한 Subsystem의 인터페이스를 제한하고 싶을때
  • Subsystem을 계층 구조로 나타내고 싶을때
 

Examples

javax.faces.context.ExternalContext uses ServletContext, HttpSession, HttpServletRequest, HttpServletResponse and others inside.
 

Code Exampl

 
Facade 가 package-private으로 정의된 HelpSystemN 클래스에 대한 입구를 제공해줌
 

Specific problems

  • Facade는 일반적으로 Singleton 으로 제공되는것이 좋다.
 
 
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(); } }