เป็นซุ้มชั้นซึ่งมีจำนวนมากของชั้นเรียนอื่น ๆ ได้หรือไม่
อะไรทำให้เป็นรูปแบบการออกแบบ สำหรับฉันมันเป็นเหมือนคลาสปกติ
คุณช่วยอธิบายรูปแบบซุ้มนี้ให้ฉันได้ไหม
เป็นซุ้มชั้นซึ่งมีจำนวนมากของชั้นเรียนอื่น ๆ ได้หรือไม่
อะไรทำให้เป็นรูปแบบการออกแบบ สำหรับฉันมันเป็นเหมือนคลาสปกติ
คุณช่วยอธิบายรูปแบบซุ้มนี้ให้ฉันได้ไหม
คำตอบ:
รูปแบบการออกแบบเป็นวิธีการทั่วไปในการแก้ปัญหาที่เกิดซ้ำ คลาสในรูปแบบการออกแบบทั้งหมดเป็นเพียงคลาสปกติ สิ่งสำคัญคือวิธีจัดโครงสร้างและวิธีทำงานร่วมกันเพื่อแก้ไขปัญหาที่กำหนดในวิธีที่ดีที่สุด
ซุ้มรูปแบบการออกแบบอินเตอร์เฟซที่ช่วยลดความยุ่งยากที่จะเป็นระบบที่ซับซ้อน; เพราะมันมักจะประกอบด้วยชั้นเรียนทั้งหมดที่ประกอบขึ้นเป็นระบบย่อยของระบบที่ซับซ้อน
ซุ้มโล่ผู้ใช้จากรายละเอียดที่ซับซ้อนของระบบและให้พวกเขามีของมันซึ่งเป็นsimplified view
easy to use
นอกจากนี้ยังdecouples
เป็นรหัสที่ใช้ระบบจากรายละเอียดของระบบย่อยทำให้ง่ายต่อการปรับเปลี่ยนระบบในภายหลัง
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
นอกจากนี้สิ่งที่สำคัญในขณะที่การเรียนรู้รูปแบบการออกแบบคือการสามารถรับรู้ว่ารูปแบบใดที่เหมาะกับปัญหาของคุณและจากนั้นใช้อย่างเหมาะสม มันเป็นเรื่องธรรมดามากที่จะใช้รูปแบบที่ผิดหรือพยายามที่จะปรับให้เข้ากับปัญหาบางอย่างเพียงเพราะคุณรู้ว่ามัน ระวังข้อผิดพลาดเหล่านั้นขณะเรียนรู้ \ โดยใช้รูปแบบการออกแบบ
Wikipediaเป็นตัวอย่างที่ดีของรูปแบบซุ้ม
/* 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();
}
}
ตามที่อธิบายไว้ในคำตอบก่อนหน้านี้มันมีส่วนต่อประสานที่ง่ายสำหรับลูกค้าที่บริโภค ตัวอย่างเช่น: "watch ESPN" เป็นฟังก์ชันที่ตั้งใจไว้ แต่มันเกี่ยวข้องกับหลายขั้นตอนเช่น:
แต่อาคารจะทำให้สิ่งนี้ง่ายขึ้นและเพียงแค่มอบฟังก์ชั่น "watch ESPN" ให้กับลูกค้า
ซุ้มซ่อนความซับซ้อนของระบบและจัดให้มีการติดต่อกับลูกค้าจากที่ลูกค้าสามารถเข้าถึงระบบ
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
หรือไม่ ในตัวอย่างของคุณระหว่างPayment
และInventory
?
คำอธิบายสั้น ๆ และง่าย ๆ :
ลองทำความเข้าใจกับสถานการณ์โดยมีและไม่มีFaçade:
หากคุณต้องการโอนเงินจาก accout1 ไปที่บัญชี 2 ระบบย่อยทั้งสองที่จะเรียกใช้คือถอนออกจากบัญชี 1 และฝากเข้าบัญชี 2
ไม่ควรอธิบายว่าซุ้มเป็นชั้นเรียนซึ่งมีชั้นเรียนอื่นจำนวนมาก ในความเป็นจริงมันเป็นอินเทอร์เฟซสำหรับคลาสนี้และควรทำให้การใช้คลาสง่ายขึ้นมิฉะนั้นคลาสของซุ้มจะไม่มีประโยชน์
เกี่ยวกับคำค้นหาของคุณ:
Facade เป็นคลาสที่มีคลาสอื่น ๆ มากมายหรือไม่?
ใช่. มันเป็นเสื้อคลุมสำหรับระบบย่อยจำนวนมากในการใช้งาน
อะไรทำให้เป็นรูปแบบการออกแบบ สำหรับฉันมันเป็นเหมือนคลาสปกติ
รูปแบบการออกแบบทั้งหมดก็เป็นคลาสปกติ @ Unmesh Kondolikarตอบคำถามนี้อย่างถูกต้อง
คุณช่วยอธิบายฉันเกี่ยวกับซุ้มนี้ได้ไหมฉันเป็นคนใหม่ในการออกแบบลวดลาย
ตาม GoF รูปแบบการออกแบบซุ้มถูกกำหนดเป็น:
จัดเตรียมอินเตอร์เฟสแบบรวมให้กับชุดของอินเตอร์เฟสในระบบย่อย Facade Pattern กำหนดอินเตอร์เฟสระดับสูงกว่าซึ่งทำให้ระบบย่อยใช้งานง่ายขึ้น
ซุ้มรูปแบบปกติจะใช้เมื่อ:
ลองมาเป็นตัวอย่างคำศัพท์ที่แท้จริงของเว็บไซต์cleartrip
เว็บไซต์นี้มีตัวเลือกในการจอง
ข้อมูลโค้ด:
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){
}
}
คำอธิบาย:
FlightBooking, TrainBooking and HotelBooking
แตกต่างจากระบบย่อยของระบบขนาดใหญ่: TravelFacade
TravelFacade
เสนออินเทอร์เฟซที่เรียบง่ายเพื่อจองหนึ่งในตัวเลือกด้านล่าง
Flight Booking
Train Booking
Hotel Booking
Flight + Hotel booking
Train + Hotel booking
book API จาก TravelFacade โทรภายในระบบย่อยของ API ด้านล่าง
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
ด้วยวิธีนี้TravelFacade
ให้ API ที่ง่ายและง่ายขึ้นโดยไม่ต้องเปิดเผย API ระบบย่อย
ประเด็นสำคัญ: (จากบทความjournaldevโดยPankaj Kumar )
ลองดูที่การทำซอร์สโค้ดด้วยเพื่อความเข้าใจที่ดีขึ้น
รูปแบบซุ้มเป็นตัวหุ้มของอินเทอร์เฟซอื่น ๆ อีกมากมายเพื่อให้ได้อินเตอร์เฟสที่ง่ายขึ้น
รูปแบบการออกแบบมีประโยชน์ในขณะที่พวกเขาแก้ปัญหาที่เกิดขึ้นและโดยทั่วไปลดความซับซ้อนของรหัส ในทีมนักพัฒนาซอฟต์แวร์ที่เห็นด้วยกับการใช้รูปแบบเดียวกันจะช่วยเพิ่มประสิทธิภาพและความเข้าใจเมื่อรักษารหัสของกันและกัน
ลองอ่านเกี่ยวกับรูปแบบเพิ่มเติม:
รูปแบบซุ้ม: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
หรือมากกว่านั้นโดยทั่วไป: http://www.dofactory.com/Patterns/Patterns.aspx
การใช้รูปแบบFaçadeเพิ่มเติมอีกอย่างหนึ่งคือการลดช่วงการเรียนรู้ของทีมของคุณ ผมขอยกตัวอย่าง:
ให้เราสมมติว่าแอปพลิเคชันของคุณต้องโต้ตอบกับ MS Excel โดยใช้โมเดลวัตถุ COM ที่จัดทำโดย Excel หนึ่งในสมาชิกในทีมของคุณรู้จัก Excel API ทั้งหมดและเขาสร้าง Facade ไว้ด้านบนซึ่งจะตอบสนองสถานการณ์พื้นฐานทั้งหมดของแอปพลิเคชัน ไม่มีสมาชิกคนอื่นในทีมต้องใช้เวลาในการเรียนรู้ Excel API ทีมสามารถใช้ส่วนหน้าได้โดยไม่ต้องรู้เรื่องภายในหรือวัตถุ MS Excel ทั้งหมดที่เกี่ยวข้องในการทำให้สถานการณ์สำเร็จ มันไม่ดีเหรอ?
ดังนั้นจึงมีอินเตอร์เฟสที่เรียบง่ายและเป็นหนึ่งเดียวบนระบบย่อยที่ซับซ้อน
อีกตัวอย่างของซุ้ม: แอปพลิเคชันของคุณเชื่อมต่อกับฐานข้อมูลและแสดงผลลัพธ์บน UI คุณสามารถใช้ซุ้มเพื่อทำให้แอปพลิเคชันของคุณสามารถกำหนดค่าได้เช่นเดียวกับที่ทำงานโดยใช้ฐานข้อมูลหรือด้วยวัตถุจำลอง ดังนั้นคุณจะทำการเรียกฐานข้อมูลทั้งหมดไปยังคลาส facade ซึ่งจะอ่านการกำหนดค่าแอพและตัดสินใจที่จะเรียกใช้เคียวรี db หรือส่งคืนออบเจกต์จำลอง วิธีนี้แอ็พพลิเคชันกลายเป็น db อิสระในกรณีที่ db ไม่พร้อมใช้งาน
ซุ้มแสดงฟังก์ชั่นที่เรียบง่ายซึ่งส่วนใหญ่เรียกว่าและการดำเนินการปกปิดความซับซ้อนที่ลูกค้าจะต้องจัดการกับ โดยทั่วไปแล้วการนำไปใช้งานนั้นมีหลายแพ็คเกจคลาสและฟังก์ชั่นที่มีหน้าอาคารที่เขียนขึ้นอย่างดีทำให้สามารถเข้าถึงชั้นเรียนอื่น ๆ ได้โดยตรง ตัวอย่างเช่นเมื่อฉันไปที่ตู้ ATM และถอนเงินจำนวนหนึ่ง ATM ซ่อนว่าจะส่งตรงไปยังธนาคารที่เป็นเจ้าของหรือกำลังจะผ่านเครือข่ายที่ต่อรองสำหรับธนาคารภายนอก ATM ทำหน้าที่เหมือนซุ้มที่ใช้อุปกรณ์และระบบย่อยหลายอย่างซึ่งในฐานะลูกค้าฉันไม่จำเป็นต้องจัดการโดยตรง
- มีตัวอย่างในชีวิตจริงที่ดีมากของแบบแผนคือเครื่องยนต์สตาร์ทรถ
ในฐานะที่เป็นคนขับรถเราเพียงเปิดกุญแจและรถก็จะเริ่ม ง่ายที่สุดเท่าที่จะทำได้ เบื้องหลังระบบรถอื่น ๆ อีกมากมายเกี่ยวข้อง (เช่นแบตเตอรี่เครื่องยนต์น้ำมันเชื้อเพลิง ฯลฯ ) เพื่อให้รถสตาร์ทได้สำเร็จ แต่ซ่อนอยู่หลังสตาร์ทเตอร์
อย่างที่คุณเห็นรถสตาร์ทเตอร์คือซุ้ม มันช่วยให้เราใช้งานอินเทอร์เฟซได้ง่ายโดยไม่ต้องกังวลเกี่ยวกับความซับซ้อนของระบบรถอื่น ๆ
มาสรุปกัน:
รูปแบบซุ้มช่วยลดความยุ่งยากและซ่อนความซับซ้อนของบล็อคโค้ดขนาดใหญ่หรือ API ให้มีอินเตอร์เฟสที่สะอาดขึ้นเข้าใจและใช้งานง่าย
facade เป็นคลาสที่มีระดับการใช้งานที่อยู่ระหว่างชุดเครื่องมือและแอปพลิเคชันที่สมบูรณ์ทำให้การใช้งานง่ายขึ้นของคลาสในแพ็คเกจหรือระบบย่อย จุดประสงค์ของรูปแบบ Facade คือการจัดหาส่วนต่อประสานที่ทำให้ระบบย่อยใช้งานง่าย - สารสกัดจาก รูปแบบการออกแบบหนังสือใน C #
อาคารกล่าวถึงการห่อหุ้มระบบย่อยที่ซับซ้อนภายในวัตถุอินเตอร์เฟสเดียว สิ่งนี้จะช่วยลดช่วงการเรียนรู้ที่จำเป็นในการใช้ประโยชน์จากระบบย่อยได้สำเร็จ นอกจากนี้ยังส่งเสริมการแยกระบบย่อยออกจากไคลเอนต์จำนวนมากที่อาจเกิดขึ้น ในทางกลับกันหาก Facade เป็นจุดเชื่อมต่อระบบย่อยเพียงระบบเดียวมันจะ จำกัด คุณสมบัติและความยืดหยุ่นที่ "ผู้ใช้ระดับสูง" อาจต้องการ
รูปแบบการออกแบบเป็นโซลูชันที่ใช้ซ้ำได้ทั่วไปสำหรับปัญหาที่เกิดขึ้นโดยทั่วไปภายในบริบทที่กำหนดในการออกแบบซอฟต์แวร์
รูปแบบการออกแบบซุ้มเป็นรูปแบบโครงสร้างตามที่กำหนดลักษณะสำหรับการสร้างความสัมพันธ์ระหว่างชั้นเรียนหรือหน่วยงาน รูปแบบการออกแบบซุ้มใช้เพื่อกำหนดอินเตอร์เฟสแบบง่ายให้กับระบบย่อยที่ซับซ้อนมากขึ้น
รูปแบบของซุ้มนั้นเหมาะอย่างยิ่งเมื่อทำงานกับคลาสที่พึ่งพาอาศัยซึ่งกันเป็นจำนวนมากหรือกับคลาสที่ต้องใช้หลายวิธีโดยเฉพาะอย่างยิ่งเมื่อมีความซับซ้อนในการใช้หรือยากที่จะเข้าใจ ชั้นซุ้มเป็น "เสื้อคลุม" ที่มีชุดของสมาชิกที่เข้าใจได้ง่ายและใช้งานง่าย สมาชิกเหล่านี้เข้าถึงระบบย่อยในนามของผู้ใช้ซุ้มซ่อนรายละเอียดการใช้งาน
รูปแบบการออกแบบซุ้มมีประโยชน์อย่างยิ่งเมื่อการตัดระบบย่อยที่ออกแบบไม่ดี แต่ไม่สามารถ refactored ได้เนื่องจากซอร์สโค้ดไม่พร้อมใช้งานหรืออินเทอร์เฟซที่มีอยู่ใช้กันอย่างแพร่หลาย บางครั้งคุณอาจตัดสินใจใช้มากกว่าหนึ่งหน้าเพื่อให้ชุดย่อยของฟังก์ชันการทำงานสำหรับวัตถุประสงค์ที่แตกต่างกัน
ตัวอย่างหนึ่งที่ใช้รูปแบบซุ้มคือการรวมเว็บไซต์กับแอปพลิเคชันธุรกิจ ซอฟต์แวร์ที่มีอยู่อาจมีตรรกะทางธุรกิจจำนวนมากที่ต้องเข้าถึงในลักษณะเฉพาะ เว็บไซต์อาจต้องการการ จำกัด การเข้าถึงตรรกะทางธุรกิจนี้เท่านั้น ตัวอย่างเช่นเว็บไซต์อาจต้องแสดงให้เห็นว่ารายการขายมีระดับสต็อก จำกัด หรือไม่ กระบวนการ IsLowStock ของคลาส facade สามารถส่งคืนค่าบูลีนเพื่อระบุสิ่งนี้ เบื้องหลังวิธีการนี้อาจซ่อนความซับซ้อนของการประมวลผลสต็อกทางกายภาพปัจจุบันสต็อคขาเข้ารายการที่ปันส่วนและระดับสต็อคต่ำสำหรับแต่ละรายการ
รูปแบบการออกแบบทั้งหมดเป็นบางคลาสที่จัดเรียงในบางวิธีหรืออื่น ๆ ที่เหมาะสมกับแอปพลิเคชันเฉพาะ จุดประสงค์ของรูปแบบซุ้มคือการซ่อนความซับซ้อนของการปฏิบัติการหรือการปฏิบัติการ คุณสามารถดูตัวอย่างและเรียนรู้รูปแบบซุ้มได้จากhttp://preciseconcise.com/design_patterns/facade.php
มันสร้างเสื้อคลุมเพื่อเรียกหลายวิธี คุณมีคลาส A ที่มีเมธอด x () และ y () และคลาส B พร้อมเมธอด k () และ z () คุณต้องการเรียก x, y, z พร้อมกันเพื่อทำโดยใช้รูปแบบ Facade คุณเพียงแค่สร้างคลาส Facade และสร้างวิธีที่จะบอกว่า xyz () แทนที่จะเรียกแต่ละวิธี (x, y และ z) ทีละอย่างคุณเพียงแค่เรียกเมธอด wrapper (xyz ()) ของคลาส facade ซึ่งเรียกเมธอดเหล่านั้น
รูปแบบที่คล้ายกันคือที่เก็บ แต่เป็นส่วนใหญ่สำหรับชั้นการเข้าถึงข้อมูล
มันเป็นระบบการกวาดล้างหน้าต่างเดียวโดยทั่วไปคุณกำหนดงานใด ๆ ที่มันจะมอบหมายให้วิธีการเฉพาะในชั้นเรียนอื่น
รูปแบบการออกแบบซุ้มภายใต้รูปแบบการออกแบบโครงสร้าง ในระยะสั้นซุ้มหมายถึงลักษณะภายนอก มันหมายถึงในรูปแบบการออกแบบซุ้มเราซ่อนบางสิ่งบางอย่างและแสดงเฉพาะสิ่งที่ลูกค้าต้องการ อ่านเพิ่มเติมได้ที่บล็อกด้านล่าง: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
รูปแบบ facade จัดเตรียมอินเตอร์เฟสแบบรวมให้กับกลุ่มอินเตอร์เฟสระบบย่อย ซุ้มกำหนดอินเทอร์เฟซระดับสูงซึ่งทำให้การทำงานกับระบบย่อยง่ายขึ้น