รูปแบบการออกแบบซุ้มคืออะไร?


191

เป็นซุ้มชั้นซึ่งมีจำนวนมากของชั้นเรียนอื่น ๆ ได้หรือไม่

อะไรทำให้เป็นรูปแบบการออกแบบ สำหรับฉันมันเป็นเหมือนคลาสปกติ

คุณช่วยอธิบายรูปแบบซุ้มนี้ให้ฉันได้ไหม


7
รูปแบบการออกแบบทุกรูปแบบนั้นอยู่ในชั้นเรียนที่หลากหลาย
เฟลิกซ์คลิง

1
รูปแบบFaçadeสร้างอินเตอร์เฟสที่ใช้งานง่ายโดยซ่อนหลายอินเตอร์เฟสไว้ในหนึ่งคลาส บทความนี้มีรายละเอียดเพิ่มเติม
user3199690

อธิบายอย่างดีในโพสต์นี้programmerzdojo.com/java-tutorials/ …
rishi007bansod

ต้องยกนิ้วลงเพราะมัน "ไม่แสดงความพยายามวิจัย"
Roy Truelove

1
@ RoyTruelove ทำในสิ่งที่คุณต้องการ ไม่สนใจตราบใดที่มีคำตอบที่สนับสนุนสำหรับคำถาม มีคำตอบที่สนับสนุนคำถามนี้หรือไม่?
วิน

คำตอบ:


190

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

ซุ้มรูปแบบการออกแบบอินเตอร์เฟซที่ช่วยลดความยุ่งยากที่จะเป็นระบบที่ซับซ้อน; เพราะมันมักจะประกอบด้วยชั้นเรียนทั้งหมดที่ประกอบขึ้นเป็นระบบย่อยของระบบที่ซับซ้อน

ซุ้มโล่ผู้ใช้จากรายละเอียดที่ซับซ้อนของระบบและให้พวกเขามีของมันซึ่งเป็นsimplified view easy to useนอกจากนี้ยังdecouplesเป็นรหัสที่ใช้ระบบจากรายละเอียดของระบบย่อยทำให้ง่ายต่อการปรับเปลี่ยนระบบในภายหลัง

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

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

นอกจากนี้สิ่งที่สำคัญในขณะที่การเรียนรู้รูปแบบการออกแบบคือการสามารถรับรู้ว่ารูปแบบใดที่เหมาะกับปัญหาของคุณและจากนั้นใช้อย่างเหมาะสม มันเป็นเรื่องธรรมดามากที่จะใช้รูปแบบที่ผิดหรือพยายามที่จะปรับให้เข้ากับปัญหาบางอย่างเพียงเพราะคุณรู้ว่ามัน ระวังข้อผิดพลาดเหล่านั้นขณะเรียนรู้ \ โดยใช้รูปแบบการออกแบบ


9
@ เควิน: การรู้ว่าเมื่อไรที่จะใช้มันเป็นส่วนที่ยากที่สุด ในทางทฤษฎีรูปแบบอาจจะง่าย แต่ imo พวกเขายากในทางปฏิบัติ คุณสามารถเรียนรู้สิ่งนี้เป็นประสบการณ์เท่านั้นเช่น การเข้ารหัส, การเข้ารหัส, การเข้ารหัส
เฟลิกซ์คลิง

รูปแบบการออกแบบซุ้มยังใช้เพื่อซ่อนการใช้งานของรายละเอียดและจัดหา API สาธารณะอย่างปลอดภัย
yebw

29
$ in jquery เป็นเพียงตัวอย่างง่ายๆของรูปแบบการออกแบบซุ้มซึ่งมีส่วนต่อประสานที่เรียบง่ายและซ่อนความซับซ้อนทั้งหมด
Ajay Beniwal

สำหรับบางคนที่กำลังมองหารูปแบบการออกแบบซุ้มที่มีตัวอย่างในโลกแห่งความจริง ฉันเจอคำสั่ง YouTube สั้น ๆ นี้ หวังว่าจะเป็นประโยชน์youtu.be/dLjJo2v2re8
Sankar ganesh

เราสามารถมีเลเยอร์ซุ้มมากกว่าหนึ่งสำหรับระบบเดียวเมื่อแอปพลิเคชันขยายใหญ่ขึ้นได้หรือไม่
Jeeva Jsb

100

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();
    }
}

6
นี่เป็นตัวอย่างที่ดี ลูกค้าจะต้องสามารถรวมขั้นตอนทั้งหมดในซุ้มได้ด้วยหากพวกเขาเลือกเช่นกันไม่ควรซ่อนสิ่งใดด้วยวิธีส่วนตัว
Rob

2
Imho นี่ไม่ใช่ตัวอย่างที่ดีเพราะมันไม่ได้เน้นถึงกรณีการใช้งาน ตัวอย่างแสดงให้เห็นว่าเป็นชั้นเรียนปกติ การเชื่อมโยงกับฮาร์ดแวร์เป็นองค์ประกอบ อาจ overkill สำหรับตัวอย่างใน wiki แต่การใช้การฉีดพึ่งพาแทนการติดตั้ง submodules จะเน้นความตั้งใจและอาจหลีกเลี่ยงความสับสนของ TO
ManuelSchneid3r

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

41

ตามที่อธิบายไว้ในคำตอบก่อนหน้านี้มันมีส่วนต่อประสานที่ง่ายสำหรับลูกค้าที่บริโภค ตัวอย่างเช่น: "watch ESPN" เป็นฟังก์ชันที่ตั้งใจไว้ แต่มันเกี่ยวข้องกับหลายขั้นตอนเช่น:

  1. เปิดทีวีหากจำเป็น
  2. ตรวจสอบการทำงานของดาวเทียม / เคเบิล
  3. เปลี่ยนเป็น ESPN หากจำเป็น

แต่อาคารจะทำให้สิ่งนี้ง่ายขึ้นและเพียงแค่มอบฟังก์ชั่น "watch ESPN" ให้กับลูกค้า


29

ซุ้มซ่อนความซับซ้อนของระบบและจัดให้มีการติดต่อกับลูกค้าจากที่ลูกค้าสามารถเข้าถึงระบบ

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?
Isuru

19

คำอธิบายสั้น ๆ และง่าย ๆ :

  • รูปแบบของซุ้มให้อินเทอร์เฟซรวมเป็นชุดของอินเทอร์เฟซในระบบย่อย
  • Facade กำหนดอินเทอร์เฟซระดับสูงที่ทำให้ระบบย่อยใช้งานง่ายขึ้น

ลองทำความเข้าใจกับสถานการณ์โดยมีและไม่มีFaçade:
หากคุณต้องการโอนเงินจาก accout1 ไปที่บัญชี 2 ระบบย่อยทั้งสองที่จะเรียกใช้คือถอนออกจากบัญชี 1 และฝากเข้าบัญชี 2

มีและไม่มีซุ้ม


คำอธิบายและตัวอย่างที่ง่ายและชัดเจนขอขอบคุณ! คุณสามารถอธิบายสิ่งที่กำหนดระบบย่อยได้หรือไม่ เมื่อระบบย่อยอาจประกอบด้วย subclasses / ฟังก์ชั่นที่ค่อนข้างไม่เกี่ยวข้องคำจำกัดความของคุณจะใช้กับคลาสเกือบทุกคลาส คลาสย่อยของระบบย่อยนั้นจะต้องมีความสัมพันธ์ที่แน่นแฟ้นมาก ๆ เช่นสร้างโมดูลหรือไลบรารีที่สามารถเรียกส่วนหน้าของซุ้มได้หรือไม่?
Benni

@Benni ใช่ระบบย่อย (อาจเป็นคลาส) อาจมีฟังก์ชั่นที่ค่อนข้างไม่เกี่ยวข้อง แต่ facade เป็นคลาสที่คุณตัดสินใจเลือกฟังก์ชั่นเฉพาะ คุณต้องการจอง "แพ็คเกจทัวร์" คุณเลือกโรงแรมแท็กซี่เที่ยวบินในที่เดียว / แบบฟอร์มจากนั้นภายในอาคารจะเรียกใช้ฟังก์ชั่นของชั้นเรียนที่เหมาะสมที่แตกต่างกันและส่งคืนผลลัพธ์สุดท้ายให้คุณ ไม่ใช่เหรอ
Arun Raaj

10

ไม่ควรอธิบายว่าซุ้มเป็นชั้นเรียนซึ่งมีชั้นเรียนอื่นจำนวนมาก ในความเป็นจริงมันเป็นอินเทอร์เฟซสำหรับคลาสนี้และควรทำให้การใช้คลาสง่ายขึ้นมิฉะนั้นคลาสของซุ้มจะไม่มีประโยชน์


7

เกี่ยวกับคำค้นหาของคุณ:

Facade เป็นคลาสที่มีคลาสอื่น ๆ มากมายหรือไม่?

ใช่. มันเป็นเสื้อคลุมสำหรับระบบย่อยจำนวนมากในการใช้งาน

อะไรทำให้เป็นรูปแบบการออกแบบ สำหรับฉันมันเป็นเหมือนคลาสปกติ

รูปแบบการออกแบบทั้งหมดก็เป็นคลาสปกติ @ Unmesh Kondolikarตอบคำถามนี้อย่างถูกต้อง

คุณช่วยอธิบายฉันเกี่ยวกับซุ้มนี้ได้ไหมฉันเป็นคนใหม่ในการออกแบบลวดลาย

ตาม GoF รูปแบบการออกแบบซุ้มถูกกำหนดเป็น:

จัดเตรียมอินเตอร์เฟสแบบรวมให้กับชุดของอินเตอร์เฟสในระบบย่อย Facade Pattern กำหนดอินเตอร์เฟสระดับสูงกว่าซึ่งทำให้ระบบย่อยใช้งานง่ายขึ้น

ซุ้มรูปแบบปกติจะใช้เมื่อ:

  1. จำเป็นต้องมีส่วนต่อประสานที่เรียบง่ายในการเข้าถึงระบบที่ซับซ้อน
  2. abstractions และ implementations ของระบบย่อยนั้นเชื่อมโยงกันอย่างแน่นหนา
  3. ต้องการจุดเข้าใช้งานของซอฟต์แวร์แต่ละระดับ
  4. ระบบมีความซับซ้อนหรือยากที่จะเข้าใจ

ลองมาเป็นตัวอย่างคำศัพท์ที่แท้จริงของเว็บไซต์cleartrip

เว็บไซต์นี้มีตัวเลือกในการจอง

  1. เที่ยวบิน
  2. โรงแรม
  3. ตั๋วเครื่องบิน + โรงแรม

ข้อมูลโค้ด:

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){

    }
}

คำอธิบาย:

  1. FlightBooking, TrainBooking and HotelBooking แตกต่างจากระบบย่อยของระบบขนาดใหญ่: TravelFacade

  2. TravelFacade เสนออินเทอร์เฟซที่เรียบง่ายเพื่อจองหนึ่งในตัวเลือกด้านล่าง

    Flight Booking
    Train Booking 
    Hotel Booking
    Flight + Hotel booking 
    Train + Hotel booking
    
  3. book API จาก TravelFacade โทรภายในระบบย่อยของ API ด้านล่าง

    flightBooking.bookFlight
    trainBooking.bookTrain(info);
    hotelBooking.bookHotel(info);
    
  4. ด้วยวิธีนี้TravelFacadeให้ API ที่ง่ายและง่ายขึ้นโดยไม่ต้องเปิดเผย API ระบบย่อย

ประเด็นสำคัญ: (จากบทความjournaldevโดยPankaj Kumar )

  1. รูปแบบด้านหน้าเป็นเหมือนตัวช่วยสำหรับแอปพลิเคชันไคลเอนต์
  2. รูปแบบซุ้มสามารถนำมาใช้ที่จุดของการพัฒนาใด ๆ มักจะเมื่อจำนวนของอินเตอร์เฟซการเจริญเติบโตและระบบรับ comple x
  3. อินเทอร์เฟซระบบย่อยไม่รับรู้ถึง Facade และพวกเขาไม่ควรมีการอ้างอิงถึงส่วนต่อประสาน Facade
  4. ควรใช้รูปแบบซุ้มสำหรับอินเทอร์เฟซชนิดเดียวกันโดยมีจุดประสงค์เพื่อจัดเตรียมอินเทอร์เฟซเดียวแทนที่จะใช้หลายอินเตอร์เฟสที่ทำงานประเภทเดียวกัน

ลองดูที่การทำซอร์สโค้ดด้วยเพื่อความเข้าใจที่ดีขึ้น


6

รูปแบบซุ้มเป็นตัวหุ้มของอินเทอร์เฟซอื่น ๆ อีกมากมายเพื่อให้ได้อินเตอร์เฟสที่ง่ายขึ้น

รูปแบบการออกแบบมีประโยชน์ในขณะที่พวกเขาแก้ปัญหาที่เกิดขึ้นและโดยทั่วไปลดความซับซ้อนของรหัส ในทีมนักพัฒนาซอฟต์แวร์ที่เห็นด้วยกับการใช้รูปแบบเดียวกันจะช่วยเพิ่มประสิทธิภาพและความเข้าใจเมื่อรักษารหัสของกันและกัน

ลองอ่านเกี่ยวกับรูปแบบเพิ่มเติม:

รูปแบบซุ้ม: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1

หรือมากกว่านั้นโดยทั่วไป: http://www.dofactory.com/Patterns/Patterns.aspx


nileshgule.com/2012/07/facade-design-pattern.htmlฉันพยายามอธิบายรูปแบบการออกแบบซุ้มที่นี่พร้อมตัวอย่างของกระบวนการตรวจสอบสินเชื่อบ้าน
Nilesh Gule

6

การใช้รูปแบบFaçadeเพิ่มเติมอีกอย่างหนึ่งคือการลดช่วงการเรียนรู้ของทีมของคุณ ผมขอยกตัวอย่าง:

ให้เราสมมติว่าแอปพลิเคชันของคุณต้องโต้ตอบกับ MS Excel โดยใช้โมเดลวัตถุ COM ที่จัดทำโดย Excel หนึ่งในสมาชิกในทีมของคุณรู้จัก Excel API ทั้งหมดและเขาสร้าง Facade ไว้ด้านบนซึ่งจะตอบสนองสถานการณ์พื้นฐานทั้งหมดของแอปพลิเคชัน ไม่มีสมาชิกคนอื่นในทีมต้องใช้เวลาในการเรียนรู้ Excel API ทีมสามารถใช้ส่วนหน้าได้โดยไม่ต้องรู้เรื่องภายในหรือวัตถุ MS Excel ทั้งหมดที่เกี่ยวข้องในการทำให้สถานการณ์สำเร็จ มันไม่ดีเหรอ?

ดังนั้นจึงมีอินเตอร์เฟสที่เรียบง่ายและเป็นหนึ่งเดียวบนระบบย่อยที่ซับซ้อน


5

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


5

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


5

- มีตัวอย่างในชีวิตจริงที่ดีมากของแบบแผนคือเครื่องยนต์สตาร์ทรถ

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

อย่างที่คุณเห็นรถสตาร์ทเตอร์คือซุ้ม มันช่วยให้เราใช้งานอินเทอร์เฟซได้ง่ายโดยไม่ต้องกังวลเกี่ยวกับความซับซ้อนของระบบรถอื่น ๆ

มาสรุปกัน:

รูปแบบซุ้มช่วยลดความยุ่งยากและซ่อนความซับซ้อนของบล็อคโค้ดขนาดใหญ่หรือ API ให้มีอินเตอร์เฟสที่สะอาดขึ้นเข้าใจและใช้งานง่าย


4

facade เป็นคลาสที่มีระดับการใช้งานที่อยู่ระหว่างชุดเครื่องมือและแอปพลิเคชันที่สมบูรณ์ทำให้การใช้งานง่ายขึ้นของคลาสในแพ็คเกจหรือระบบย่อย จุดประสงค์ของรูปแบบ Facade คือการจัดหาส่วนต่อประสานที่ทำให้ระบบย่อยใช้งานง่าย - สารสกัดจาก รูปแบบการออกแบบหนังสือใน C #


4

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

ที่มา: https://sourcemaking.com/design_patterns/facade


3

รูปแบบการออกแบบเป็นโซลูชันที่ใช้ซ้ำได้ทั่วไปสำหรับปัญหาที่เกิดขึ้นโดยทั่วไปภายในบริบทที่กำหนดในการออกแบบซอฟต์แวร์

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

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

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

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


2

รูปแบบการออกแบบทั้งหมดเป็นบางคลาสที่จัดเรียงในบางวิธีหรืออื่น ๆ ที่เหมาะสมกับแอปพลิเคชันเฉพาะ จุดประสงค์ของรูปแบบซุ้มคือการซ่อนความซับซ้อนของการปฏิบัติการหรือการปฏิบัติการ คุณสามารถดูตัวอย่างและเรียนรู้รูปแบบซุ้มได้จากhttp://preciseconcise.com/design_patterns/facade.php


2

มันสร้างเสื้อคลุมเพื่อเรียกหลายวิธี คุณมีคลาส A ที่มีเมธอด x () และ y () และคลาส B พร้อมเมธอด k () และ z () คุณต้องการเรียก x, y, z พร้อมกันเพื่อทำโดยใช้รูปแบบ Facade คุณเพียงแค่สร้างคลาส Facade และสร้างวิธีที่จะบอกว่า xyz () แทนที่จะเรียกแต่ละวิธี (x, y และ z) ทีละอย่างคุณเพียงแค่เรียกเมธอด wrapper (xyz ()) ของคลาส facade ซึ่งเรียกเมธอดเหล่านั้น

รูปแบบที่คล้ายกันคือที่เก็บ แต่เป็นส่วนใหญ่สำหรับชั้นการเข้าถึงข้อมูล


1

มันเป็นระบบการกวาดล้างหน้าต่างเดียวโดยทั่วไปคุณกำหนดงานใด ๆ ที่มันจะมอบหมายให้วิธีการเฉพาะในชั้นเรียนอื่น


1

รูปแบบการออกแบบซุ้มภายใต้รูปแบบการออกแบบโครงสร้าง ในระยะสั้นซุ้มหมายถึงลักษณะภายนอก มันหมายถึงในรูปแบบการออกแบบซุ้มเราซ่อนบางสิ่งบางอย่างและแสดงเฉพาะสิ่งที่ลูกค้าต้องการ อ่านเพิ่มเติมได้ที่บล็อกด้านล่าง: http://www.sharepointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html


1

รูปแบบ facade จัดเตรียมอินเตอร์เฟสแบบรวมให้กับกลุ่มอินเตอร์เฟสระบบย่อย ซุ้มกำหนดอินเทอร์เฟซระดับสูงซึ่งทำให้การทำงานกับระบบย่อยง่ายขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.