Apa pola desain fasad?

191

Apakah fasad kelas yang berisi banyak kelas lain?

Apa yang membuatnya menjadi pola desain? Bagi saya, itu seperti kelas normal.

Bisakah Anda jelaskan kepada saya pola Fasad ini ?

kevin
sumber
7
Setiap pola desain dalam implementasinya banyak kelas.
Felix Kling
1
Pola façade menciptakan antarmuka yang mudah digunakan dengan menyembunyikan beberapa antarmuka dalam satu kelas. Artikel ini memiliki lebih banyak detail .
user3199690
dijelaskan dengan baik di posting ini programmerzdojo.com/java-tutorials/…
rishi007bansod
Harus mengacuhkan ini karena "tidak menunjukkan upaya penelitian"
Roy Truelove
1
@ RoyTruelove, lakukan apa yang kamu inginkan. Tidak peduli asalkan ada jawaban yang mendukung untuk pertanyaan itu. Adakah jawaban yang mendukung untuk pertanyaan itu?
kevin

Jawaban:

190

Pola desain adalah cara umum untuk memecahkan masalah berulang. Kelas di semua pola desain hanyalah kelas biasa. Yang penting adalah bagaimana mereka disusun dan bagaimana mereka bekerja bersama untuk memecahkan masalah yang diberikan dengan cara terbaik.

The Facade pola desain menyederhanakan antarmuka untuk sistem yang kompleks; karena biasanya terdiri dari semua kelas yang membentuk subsistem dari sistem yang kompleks.

Fasad melindungi pengguna dari detail rumit sistem dan memberi mereka bagian simplified viewdarinya easy to use. Ini juga decoupleskode yang menggunakan sistem dari rincian subsistem, sehingga lebih mudah untuk memodifikasi sistem nanti.

http://www.dofactory.com/Patterns/PatternFacade.aspx

http://www.blackwasp.co.uk/Facade.aspx

Selain itu, apa yang penting saat mempelajari pola desain adalah untuk dapat mengenali pola mana yang cocok dengan masalah Anda dan kemudian menggunakannya dengan tepat. Merupakan hal yang sangat umum untuk menyalahgunakan suatu pola atau mencoba menyesuaikannya dengan masalah hanya karena Anda mengetahuinya. Waspadai jebakan tersebut saat belajar \ menggunakan pola desain.

Lepaskan Kondolikar
sumber
9
@ kevin: Mengetahui kapan harus menggunakannya adalah bagian yang paling sulit. Secara teori, pola mungkin mudah, tetapi karena itu sulit dalam prakteknya. Anda hanya bisa mempelajari ini menjadi pengalaman, yaitu. coding, coding, coding.
Felix Kling
Pola desain fasad juga aways digunakan untuk menyembunyikan implementasi kelas detail dan memasok api publik dengan aman.
yebw
29
$ in jquery hanyalah contoh sederhana dari pola desain fasad yang menyediakan antarmuka sederhana dan menyembunyikan semua kerumitan
Ajay Beniwal
untuk seseorang yang mencari pola desain fasad dengan contoh dunia nyata. saya menemukan tutuorial youtube singkat ini. semoga bermanfaat youtu.be/dLjJo2v2re8
Sankar ganesh
dapatkah kita memiliki lebih dari satu lapisan fasad untuk sistem tunggal ketika aplikasi tumbuh lebih besar?
Jeeva Jsb
100

Wikipedia memiliki contoh pola Facade yang bagus.

/* Complex parts */

class CPU {
    public void freeze() { ... }
    public void jump(long position) { ... }
    public void execute() { ... }
}

class Memory {
    public void load(long position, byte[] data) { ... }
}

class HardDrive {
    public byte[] read(long lba, int size) { ... }
}

/* Facade */

class ComputerFacade {
    private CPU processor;
    private Memory ram;
    private HardDrive hd;

    public ComputerFacade() {
        this.processor = new CPU();
        this.ram = new Memory();
        this.hd = new HardDrive();
    }

    public void start() {
        processor.freeze();
        ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
        processor.jump(BOOT_ADDRESS);
        processor.execute();
    }
}

/* Client */

class You {
    public static void main(String[] args) {
        ComputerFacade computer = new ComputerFacade();
        computer.start();
    }
}
Erdem Gezer
sumber
6
Ini adalah contoh yang bagus. Seorang klien harus dapat menyatukan semua langkah dalam fasad jika mereka memilih juga, tidak ada yang harus disembunyikan dengan metode pribadi.
Rob
2
Imho ini bukan contoh yang baik karena tidak menekankan use case. Contohnya hanya menunjukkan, seperti dikatakan TO, kelas reguler. Asosiasi ke perangkat keras adalah komposisi. Mungkin berlebihan untuk contoh pada wiki, tetapi menggunakan injeksi dependensi alih-alih instanciating submodules akan menekankan niat dan mungkin menghindari kebingungan TO.
ManuelSchneid3r
Ini adalah contoh yang luar biasa karena hanya membungkus ribuan kata secara singkat untuk memahami konsep itu sendiri. Istirahat hanyalah perincian di sekitar berbagai skenario yang dapat dimiliki seseorang (tentu saja pola desain tidak akan pernah dapat mencakup setiap skenario).
Syed
41

Seperti dijelaskan dalam jawaban sebelumnya, ia menyediakan antarmuka sederhana untuk klien yang mengonsumsi. Misalnya: "menonton ESPN" adalah fungsi yang dimaksud. Tetapi itu melibatkan beberapa langkah seperti:

  1. Nyalakan TV jika diperlukan;
  2. Periksa fungsi satelit / kabel;
  3. Beralih ke ESPN jika diperlukan.

Tetapi fasad akan menyederhanakan ini dan hanya menyediakan fungsi "tonton ESPN" untuk klien.

Aravind
sumber
29

Fasad menyembunyikan kompleksitas sistem dan menyediakan antarmuka untuk klien dari mana klien dapat mengakses sistem.

public class Inventory {
public String checkInventory(String OrderId) {
    return "Inventory checked";
}
}

public class Payment {
public String deductPayment(String orderID) {
    return "Payment deducted successfully";
}
}


public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();

public void placeOrder(String orderId) {
    String step1 = inventry.checkInventory(orderId);
    String step2 = pymt.deductPayment(orderId);
    System.out
            .println("Following steps completed:" + step1
                    + " & " + step2);
   }
}

public class Client {
       public static void main(String args[]){
         OrderFacade orderFacade = new OrderFacade();
         orderFacade.placeOrder("OR123456");
         System.out.println("Order processing completed");
       }
  }
KaviK
sumber
Apakah diperbolehkan untuk sub sistem untuk berkomunikasi satu sama lain tanpa melalui OrderFacade? Dalam contoh Anda, antara Paymentdan Inventory?
Isuru
19

Penjelasan singkat dan sederhana:

  • Pola fasad menyediakan antarmuka terpadu untuk satu set antarmuka di subsistem.
  • Fasad mendefinisikan antarmuka tingkat yang lebih tinggi yang membuat subsistem lebih mudah digunakan.

Cobalah untuk memahami skenario dengan dan tanpa Façade:
Jika Anda ingin mentransfer uang dari accout1 ke akun2 maka dua subsistem yang akan dipanggil adalah, tarik dari akun1 dan setor ke akun2.

dengan dan tanpa fasad

Arun Raaj
sumber
Penjelasan dan contoh yang sederhana dan jelas, terima kasih! Bisakah Anda juga menjelaskan apa yang mendefinisikan subsistem? Ketika subsistem dapat terdiri dari subclass / fungsi yang relatif tidak terkait, definisi Anda berlaku untuk hampir semua kelas. Haruskah kelas subsistem terkait sangat erat, misalnya membentuk modul atau perpustakaan, yang dapat disebut fasad sebagai fasad?
Benni
@ Beneni Ya, subsistem (itu akan menjadi kelas) dapat terdiri dari fungsi yang relatif tidak terkait tetapi fasad adalah kelas di mana Anda memutuskan fungsi spesifik mana yang akan dipanggil. Anda ingin memesan "paket wisata", Anda memilih hotel, taksi, penerbangan di satu tempat / formulir lalu secara internal fasad memanggil fungsi-fungsi kelas yang sesuai dan mengembalikan hasil akhir kepada Anda. Bukan?
Arun Raaj
10

Fasad tidak boleh digambarkan sebagai kelas yang berisi banyak kelas lain. Ini sebenarnya adalah antarmuka untuk kelas ini dan harus membuat penggunaan kelas lebih mudah jika tidak, kelas fasad tidak berguna.

llMll
sumber
7

Mengenai pertanyaan Anda:

Apakah Facade kelas yang berisi banyak kelas lain?

Iya. Ini adalah pembungkus untuk banyak sub-sistem dalam aplikasi.

Apa yang membuatnya menjadi pola desain? Bagi saya, itu seperti kelas normal

Semua pola desain juga adalah kelas normal. @ Unmesh Kondolikar menjawab pertanyaan ini dengan benar.

Bisakah Anda menjelaskan kepada saya tentang Fasad ini, saya baru merancang pola.

Menurut GOF, Facade pola desain defind sebagai:

Menyediakan antarmuka terpadu untuk satu set antarmuka di subsistem. Fasad Pola mendefinisikan antarmuka tingkat yang lebih tinggi yang membuat subsistem lebih mudah digunakan

The Facade Pola biasanya digunakan saat:

  1. Antarmuka yang sederhana diperlukan untuk mengakses sistem yang kompleks.
  2. Abstraksi dan implementasi subsistem digabungkan secara ketat.
  3. Perlu titik masuk ke setiap tingkat perangkat lunak berlapis.
  4. Sistemnya sangat kompleks atau sulit dipahami.

Mari kita ambil contoh kata nyata dari situs web cleartrip .

Situs web ini menyediakan opsi untuk memesan

  1. Penerbangan
  2. Hotel
  3. Penerbangan + Hotel

Cuplikan kode:

import java.util.*;

public class TravelFacade{
    FlightBooking flightBooking;
    TrainBooking trainBooking;
    HotelBooking hotelBooking;

    enum BookingType {
        Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
    }; 

    public TravelFacade(){
        flightBooking = new FlightBooking();
        trainBooking = new TrainBooking();
        hotelBooking = new HotelBooking();        
    }
    public void book(BookingType type, BookingInfo info){
        switch(type){
            case Flight:
                // book flight;
                flightBooking.bookFlight(info);
                return;
            case Hotel:
                // book hotel;
                hotelBooking.bookHotel(info);
                return;
            case Train:
                // book Train;
                trainBooking.bookTrain(info);
                return;
            case Flight_And_Hotel:
                // book Flight and Hotel
                flightBooking.bookFlight(info);
                hotelBooking.bookHotel(info);
                return;
             case Train_And_Hotel:
                // book Train and Hotel
                trainBooking.bookTrain(info);
                hotelBooking.bookHotel(info);
                return;                
        }
    }
}
class BookingInfo{
    String source;
    String destination;
    Date    fromDate;
    Date     toDate;
    List<PersonInfo> list;
}
class PersonInfo{
    String name;
    int       age;
    Address address;
}
class Address{

}
class FlightBooking{
    public FlightBooking(){

    }
    public void bookFlight(BookingInfo info){

    }
}
class HotelBooking{
    public HotelBooking(){

    }
    public void bookHotel(BookingInfo info){

    }
}
class TrainBooking{
    public TrainBooking(){

    }
    public void bookTrain(BookingInfo info){

    }
}

Penjelasan:

  1. FlightBooking, TrainBooking and HotelBooking perbedaan sub-sistem dari sistem besar: TravelFacade

  2. TravelFacade menawarkan antarmuka sederhana untuk memesan salah satu opsi di bawah ini

    Flight Booking
    Train Booking 
    Hotel Booking
    Flight + Hotel booking 
    Train + Hotel booking
    
  3. buku API dari TravelFacade panggilan internal di bawah API sub-sistem

    flightBooking.bookFlight
    trainBooking.bookTrain(info);
    hotelBooking.bookHotel(info);
    
  4. Dengan cara ini, TravelFacadeberikan API sub-sistem yang lebih sederhana dan lebih mudah tanpa API yang terbuka.

Kunci takeaways: (dari artikel journaldev oleh Pankaj Kumar )

  1. Pola fasad lebih mirip pembantu untuk aplikasi klien
  2. Pola fasad dapat diterapkan pada setiap titik pengembangan, biasanya ketika jumlah antarmuka tumbuh dan sistem menjadi lengkap x .
  3. Antarmuka subsistem tidak mengetahui Facade dan mereka seharusnya tidak memiliki referensi antarmuka Facade
  4. Pola fasad harus diterapkan untuk jenis antarmuka yang sama , tujuannya adalah untuk menyediakan antarmuka tunggal daripada banyak antarmuka yang melakukan jenis pekerjaan yang sama

Silahkan lihat pada sourcemaking artikel juga untuk pemahaman yang lebih baik.

Ravindra babu
sumber
6

Pola fasad adalah pembungkus banyak antarmuka lain dalam hasil untuk menghasilkan antarmuka yang lebih sederhana.

Pola desain berguna karena mereka memecahkan masalah berulang dan secara umum menyederhanakan kode. Dalam tim pengembang yang setuju untuk menggunakan pola yang sama, ini meningkatkan efisiensi dan pemahaman saat saling memelihara kode.

Coba baca lebih banyak pola:

Pola Fasad: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1

atau lebih umum: http://www.dofactory.com/Patterns/Patterns.aspx

Bidik Kai
sumber
nileshgule.com/2012/07/facade-design-pattern.html Saya mencoba menggambarkan pola desain fasad di sini dengan contoh proses verifikasi pinjaman rumah.
Nilesh Gule
6

Satu tambahan penggunaan pola Façade bisa untuk mengurangi kurva belajar tim Anda. Biarkan saya memberi Anda sebuah contoh:

Mari kita asumsikan bahwa aplikasi Anda perlu berinteraksi dengan MS Excel dengan memanfaatkan model objek COM yang disediakan oleh Excel. Salah satu anggota tim Anda mengetahui semua API Excel dan dia membuat Fasad di atasnya, yang memenuhi semua skenario dasar aplikasi. Tidak ada anggota lain di tim yang perlu menghabiskan waktu untuk mempelajari API Excel. Tim dapat menggunakan fasad tanpa mengetahui bagian dalam atau semua objek MS Excel yang terlibat dalam memenuhi skenario. Bukankah ini hebat?

Dengan demikian, ia menyediakan antarmuka yang disederhanakan dan disatukan di atas sub-sistem yang kompleks.

Anand Patel
sumber
5

Contoh fasad lain: misalnya aplikasi Anda terhubung ke basis data dan menampilkan hasil pada UI. Anda dapat menggunakan fasad untuk membuat aplikasi Anda dapat dikonfigurasi, seperti dalam menjalankan menggunakan database atau dengan objek tiruan. Jadi, Anda akan membuat semua panggilan basis data ke kelas fasad, di mana ia akan membaca konfigurasi aplikasi dan memutuskan untuk memecat kueri db atau mengembalikan objek tiruan. dengan cara ini aplikasi menjadi db independen jika db tidak tersedia.

aish
sumber
5

Fasad memperlihatkan fungsi-fungsi sederhana yang sebagian besar dipanggil dan implementasi menyembunyikan kompleksitas yang seharusnya dihadapi klien. Secara umum implementasinya menggunakan beberapa paket, kelas dan fungsi di dalamnya. Fasad yang ditulis dengan baik membuat akses langsung ke kelas lain menjadi langka. Misalnya ketika saya mengunjungi ATM dan menarik sejumlah uang. ATM menyembunyikan apakah akan langsung ke bank yang dimiliki atau apakah akan melalui jaringan yang dinegosiasikan untuk bank eksternal. ATM bertindak seperti fasad yang menggunakan banyak perangkat dan sub-sistem yang sebagai klien saya tidak harus berurusan langsung.

ManojPatra
sumber
5

Ada contoh nyata dari pola kehidupan nyata - Mesin starter mobil .

Sebagai pengemudi, kami cukup menyalakan kunci dan mobil memulai. Sesederhana mungkin. Di belakang layar, banyak sistem mobil lain yang terlibat (seperti baterai, mesin, bahan bakar, dll.), Agar mobil mulai berhasil, tetapi mereka tersembunyi di belakang starter.

Seperti yang Anda lihat, starter mobil adalah Facade. Ini memberi kita antarmuka yang mudah digunakan, tanpa khawatir tentang kerumitan semua sistem mobil lainnya.

Mari kita simpulkan:

Pola Facade menyederhanakan dan menyembunyikan kompleksitas blok kode besar atau API, menyediakan antarmuka yang lebih bersih, mudah dipahami, dan mudah digunakan.

Jordan Enev
sumber
4

Fasad adalah kelas dengan tingkat fungsionalitas yang terletak antara toolkit dan aplikasi lengkap, menawarkan penggunaan kelas yang disederhanakan dalam suatu paket atau subsistem. Maksud dari pola Facade adalah untuk menyediakan antarmuka yang membuat subsistem mudah digunakan. - Ekstrak dari Pola Desain buku di C #.

Sean Hunter
sumber
4

Fasad membahas mengenkapsulasi subsistem kompleks dalam objek antarmuka tunggal. Ini mengurangi kurva belajar yang diperlukan untuk berhasil meningkatkan subsistem. Ini juga mempromosikan decoupling subsistem dari klien yang berpotensi banyak. Di sisi lain, jika Facade adalah satu-satunya titik akses untuk subsistem, itu akan membatasi fitur dan fleksibilitas yang mungkin dibutuhkan oleh "pengguna daya".

Sumber: https://sourcemaking.com/design_patterns/facade

Pang
sumber
3

Pola desain adalah solusi umum yang dapat digunakan kembali untuk masalah yang biasa terjadi dalam konteks tertentu dalam desain perangkat lunak.

Pola desain Facade adalah pola struktural karena mendefinisikan cara untuk menciptakan hubungan antara kelas atau entitas. Pola desain fasad digunakan untuk mendefinisikan antarmuka yang disederhanakan ke subsistem yang lebih kompleks.

Pola fasad sangat ideal ketika bekerja dengan sejumlah besar kelas yang saling tergantung, atau dengan kelas yang membutuhkan penggunaan beberapa metode, terutama ketika mereka rumit untuk digunakan atau sulit dipahami. Kelas fasad adalah "pembungkus" yang berisi sekumpulan anggota yang mudah dipahami dan mudah digunakan. Anggota ini mengakses subsistem atas nama pengguna fasad, menyembunyikan detail implementasi.

Pola desain fasad sangat berguna ketika membungkus subsistem yang dirancang dengan buruk tetapi tidak dapat di refactored karena kode sumber tidak tersedia atau antarmuka yang ada banyak digunakan. Kadang-kadang Anda dapat memutuskan untuk menerapkan lebih dari satu fasad untuk memberikan himpunan fungsi untuk berbagai tujuan.

Salah satu contoh penggunaan pola fasad adalah untuk mengintegrasikan situs web dengan aplikasi bisnis. Perangkat lunak yang ada dapat mencakup sejumlah besar logika bisnis yang harus diakses dengan cara tertentu. Situs web mungkin hanya memerlukan akses terbatas ke logika bisnis ini. Misalnya, situs web mungkin perlu menunjukkan apakah suatu barang untuk dijual telah mencapai tingkat stok terbatas. Metode IsLowStock dari kelas fasad dapat mengembalikan nilai Boolean untuk menunjukkan ini. Di balik layar, metode ini bisa menyembunyikan kerumitan pemrosesan stok fisik saat ini, stok masuk, item yang dialokasikan, dan level stok rendah untuk setiap item.

Program-Me-Rev
sumber
2

Semua pola desain adalah beberapa kelas yang diatur dengan cara tertentu yang sesuai dengan aplikasi tertentu. Tujuan dari pola fasad adalah untuk menyembunyikan kompleksitas suatu operasi atau operasi. Anda dapat melihat contoh dan mempelajari pola fasad dari http://precelyconcise.com/design_patterns/facade.php

Sai Sunder
sumber
2

Ini hanya membuat pembungkus untuk memanggil beberapa metode. Anda memiliki kelas A dengan metode x () dan y () dan kelas B dengan metode k () dan z (). Anda ingin memanggil x, y, z sekaligus, untuk melakukannya menggunakan pola Facade Anda cukup membuat kelas Facade dan membuat metode, misalkan saja xyz (). Alih-alih memanggil setiap metode (x, y dan z) secara individual, Anda cukup memanggil metode wrapper (xyz ()) dari kelas fasad yang memanggil metode-metode tersebut.

Pola serupa adalah repositori tetapi terutama untuk lapisan akses data.

Jeff Schreib
sumber
1

Ini pada dasarnya adalah sistem izin jendela tunggal. Anda menetapkan pekerjaan apa pun yang akan didelegasikan ke metode tertentu di kelas lain.

Saurabh
sumber
1

Pola fasad menyediakan antarmuka terpadu ke grup antarmuka subsistem. Fasad mendefinisikan antarmuka tingkat tinggi, yang menyederhanakan pekerjaan dengan subsistem.

Taras Melnyk
sumber