รูปแบบ facade เป็นรูปแบบในกลุ่ม structural design pattern รูปแบบ facade เป็นรูปแบบที่ช่วยซ่อนความซับซ้อนของระบบงานหรือกลุ่มของระบบย่อยด้วยส่วนเชื่อมต่อที่ใช้งานง่ายกว่าการติดต่อกับส่วนย่อยๆนั้นโดยตรง โดยการสร้างคลาสที่เป็น facade ขึ้นมา คลาสที่จะใช้งานจะติดต่อมาที่คลาส facade ซึ่งจะส่งต่อคำขอไปยังคลาสย่อยให้อีกทีหนึ่ง รูปแบบ facade มักจะถูกใช้ร่วมกับรูปแบบอื่น เช่น รูปแบบ adapter, รูปแบบ decorator เป็นต้น
ตัวอย่างด้านล่างเป็นการใช้รูปแบบ facade ในภาษาจาวา โดยเราใช้คลาส Subsystem เป็นตัวแทนระบบที่ซับซ้อนหรือมีระบบย่อยมากมาย
// Complex subsystem
class Subsystem {
public void operation1() {
System.out.println(“Performing operation 1”);
}
public void operation2() {
System.out.println(“Performing operation 2”);
}
public void operation3() {
System.out.println(“Performing operation 3”);
}
}
จากนั้นเราสร้างคลาส facade ขึ้นมาโดยเมธอดในคลาสจะช่วยให้การเรียกใช้งานเมธอดง่ายขึ้น
// Facade class
class Facade {
private Subsystem subsystem;
public Facade() {
subsystem = new Subsystem();
}
public void doSomething() {
subsystem.operation1();
subsystem.operation2();
}
public void doSomethingElse() {
subsystem.operation2();
subsystem.operation3();
}
}
จะเห็นว่าในการเรียกใช้งานจะเรียกใช้งานจากเมธอดของคลาส facade
public static void main(String[] args) {
Facade facade = new Facade();
facade.doSomething();
facade.doSomethingElse();
}