๐Ÿ›๏ธ

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

 

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 ์œผ๋กœ ์ œ๊ณต๋˜๋Š”๊ฒƒ์ด ์ข‹๋‹ค.