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 ?
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 ?
Jawaban:
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 view
darinya easy to use
. Ini juga decouples
kode 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.
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();
}
}
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:
Tetapi fasad akan menyederhanakan ini dan hanya menyediakan fungsi "tonton ESPN" untuk klien.
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");
}
}
OrderFacade
? Dalam contoh Anda, antara Payment
dan Inventory
?
Penjelasan singkat dan sederhana:
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.
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:
Mari kita ambil contoh kata nyata dari situs web cleartrip .
Situs web ini menyediakan opsi untuk memesan
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:
FlightBooking, TrainBooking and HotelBooking
perbedaan sub-sistem dari sistem besar: TravelFacade
TravelFacade
menawarkan antarmuka sederhana untuk memesan salah satu opsi di bawah ini
Flight Booking
Train Booking
Hotel Booking
Flight + Hotel booking
Train + Hotel booking
buku API dari TravelFacade panggilan internal di bawah API sub-sistem
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
Dengan cara ini, TravelFacade
berikan API sub-sistem yang lebih sederhana dan lebih mudah tanpa API yang terbuka.
Kunci takeaways: (dari artikel journaldev oleh Pankaj Kumar )
Silahkan lihat pada sourcemaking artikel juga untuk pemahaman yang lebih baik.
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
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.
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.
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.
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.
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 #.
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".
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.
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
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.
Pola Desain Fasad berada di bawah Pola Desain Struktural. Singkatnya Facade berarti penampilan luar. Artinya dalam pola desain Facade kami menyembunyikan sesuatu dan hanya menunjukkan apa yang sebenarnya dibutuhkan klien. Baca lebih lanjut di blog di bawah ini: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
Pola fasad menyediakan antarmuka terpadu ke grup antarmuka subsistem. Fasad mendefinisikan antarmuka tingkat tinggi, yang menyederhanakan pekerjaan dengan subsistem.