แบบแผนฟะซาด (อังกฤษ: Façade pattern, Facade pattern) เป็นแบบแผนการออกแบบซอฟต์แวร์เพื่อช่วยให้การเรียกใช้งานคลาสต่างๆ ในระบบที่ซับซ้อนทำได้ง่ายขึ้น แบบแผนฟะซาดได้ชื่อมาจากส่วนตกแต่งด้านหน้าของอาคาร ที่ทำเพื่อความสวยงามและซ่อนโครงสร้างของตัวตึก ตัวอย่างที่เห็นได้ในชีวิตประจำวันเช่น เกียร์รถยนต์แบบอัตโนมัติที่ผู้ใช้ไม่จำเป็นต้องกังวลกับรายละเอียดวิธีการเปลี่ยนเกียร์ เป็นต้น

การนำไปใช้งาน

แก้

ถ้าเรามีคลาสกลุ่มหนึ่ง (หรือแม้แต่คลาสเดียว) ที่มีวิธีการเรียกใช้งานที่สลับซับซ้อน เราสามารถซ่อนรายละเอียดวิธีการเรียกใช้งานนี้โดยสร้างคลาสขึ้นมาเพื่อทำหน้าที่เป็นฟะซาด และรวบรวมโค้ดที่ซับซ้อนไว้ในเมธอดของคลาสฟะซาดที่ง่ายต่อการเรียกใช้งาน คลาสผู้ใช้บริการเพียงเรียกเมธอดของคลาสฟะซาด โดยไม่จำเป็นต้องรู้รายละเอียดนอกเหนือไปจากนี้

 
UML คลาสไดอะแกรมของแบบแผนฟะซาด

ตัวอย่างโปรแกรม

แก้

ภาษาจาวา

แก้

ซอร์สโค้ดของฟะซาดเพื่อช่วยเขียนไฟล์ (เรียกใช้ File และ FileWriter) และอ่านไฟล์ (เรียกใช้ File, FileReader และ BufferedReader)

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileFacade {

    public void write (String filePath, String content) {
        File file = new File (filePath) ;
        FileWriter fileWriter = null;
        try {
            fileWriter = new FileWriter (file) ;
            fileWriter.write (content) ;
            fileWriter.flush () ;
        }
        catch (IOException e) {
            e.printStackTrace () ;
        }
        finally {
            if (fileWriter != null) {
                try {
                    fileWriter.close () ;
                }
                catch (IOException e) {
                    e.printStackTrace () ;
                }
            }
        }
    }

    public String read (String filePath) {
        StringBuilder sb = new StringBuilder () ;
        File file = new File (filePath) ;
        BufferedReader bufferedReader = null;
        try {
            FileReader fileReader = new FileReader (file) ;
            bufferedReader = new BufferedReader (fileReader) ;
            
            String s;
            while ((s = bufferedReader.readLine ()) != null) {
                sb.append (s) ;
            }
        }
        catch (FileNotFoundException e) {
            e.printStackTrace () ;
        }
        catch (IOException e) {
            e.printStackTrace () ;
        }
        finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close () ;
                }
                catch (IOException e) {
                    e.printStackTrace () ;
                }
            }
        }
        
        return sb.toString () ;
    }
}

การเรียกใช้งาน

String filePath = "filefacade.txt";
FileFacade ff = new FileFacade () ;

// write to file
ff.write (filePath, "Hello World!") ;

// read from file
String content = ff.read (filePath) ;

อ้างอิง

แก้
  • Design Patterns: Elements of Reusable Object-Oriented Software (ISBN 0-201-63361-2) โดย Erich Gamma, Richard Helm, Ralph Johnson และ John Vlissides (Gang of four: GoF)

แหล่งข้อมูลอื่น

แก้
  • Facade โดย Vince Huston (อังกฤษ)