Sobes.tech
Middle

Τι είναι η πρόσοψη (Facade);

sobes.tech AI

Απάντηση από AI

Η πρόσοψη είναι ένα δομικό μοτίβο σχεδίασης που παρέχει μια ενοποιημένη διεπαφή σε ένα σύνολο διεπαφών σε ένα υποσύστημα. Ορίζει μια διεπαφή υψηλού επιπέδου που απλοποιεί τη χρήση του υποσυστήματος, χωρίς να εισέρχεται στην εσωτερική του δομή.

Οι κύριοι στόχοι της πρόσοψης:

  • Απλοποίηση: Κρύβει την πολυπλοκότητα του υποσυστήματος πίσω από μια απλή διεπαφή.
  • Μείωση συσχέτισης: Ο κώδικας πελάτη αλληλεπιδρά μόνο με την πρόσοψη, όχι άμεσα με τα συστατικά του υποσυστήματος.
  • Εγκάψουλα: Οι αλλαγές στη εσωτερική δομή του υποσυστήματος έχουν μικρότερο αντίκτυπο στον κώδικα πελάτη που χρησιμοποιεί την πρόσοψη.

Παράδειγμα χρήσης: Φανταστείτε ένα πολύπλοκο σύστημα επεξεργασίας παραγγελιών σε ένα ηλεκτρονικό κατάστημα, που περιλαμβάνει υποσυστήματα αποθέματος, πληρωμών, αποστολής και ειδοποιήσεων. Αντί ο πελάτης να καλεί τις μεθόδους κάθε υποσυστήματος ξεχωριστά, μπορεί να δημιουργηθεί μια OrderProcessor ως πρόσοψη.

// Παράδειγμα δομής χωρίς πρόσοψη
// Ο κώδικας πελάτη γίνεται πολύπλοκος
// inventorySystem.checkStock(item);
// paymentSystem.processPayment(amount);
// shippingSystem.arrangeShipping(address);
// notificationSystem.sendConfirmation(email);

// Παράδειγμα δομής με πρόσοψη
public class OrderProcessorFacade {

    private InventorySystem inventorySystem;
    private PaymentSystem paymentSystem;
    private ShippingSystem shippingSystem;
    private NotificationSystem notificationSystem;

    public OrderProcessorFacade() {
        this.inventorySystem = new InventorySystem();
        this.paymentSystem = new PaymentSystem();
        this.shippingSystem = new ShippingSystem();
        this.notificationSystem = new NotificationSystem();
    }

    public void placeOrder(Item item, double amount, String address, String email) {
        // Έλεγχος διαθεσιμότητας
        inventorySystem.checkStock(item);

        // Επεξεργασία πληρωμής
        paymentSystem.processPayment(amount);

        // Οργάνωση αποστολής
        shippingSystem.arrangeShipping(address);

        // Αποστολή ειδοποίησης
        notificationSystem.sendConfirmation(email);

        // Επιπλέον λογική ή διαχείριση σφαλμάτων
    }
}

// Κώδικας πελάτη με χρήση της πρόσοψης
// OrderProcessorFacade orderProcessor = new OrderProcessorFacade();
// orderProcessor.placeOrder(item, amount, address, email);

// Για τον πελάτη, η αλληλεπίδραση απλοποιείται σημαντικά