User Tools

Site Tools


oop:proxy_pattern

This is an old revision of the document!


Proxy Pattern

Το Proxy Pattern (Μοτίβο Μεσολαβητή) ανήκει στα Δομικά Μοτίβα Σχεδίασης (Structural Design Patterns). Ο κύριος σκοπός του είναι να παρέχει ένα υποκατάστατο ή έναν εκπρόσωπο (proxy) για ένα άλλο αντικείμενο, ώστε να ελέγχει την πρόσβαση σε αυτό.

Σκεφτείτε το σαν μια χρεωστική κάρτα. Η κάρτα είναι ο εκπρόσωπος των μετρητών στο λογαριασμό σας. Όταν πληρώνετε με αυτήν, η κάρτα (proxy) μεσολαβεί για να ελέγξει αν υπάρχει το ποσό και να κάνει τη συναλλαγή με τον πραγματικό τραπεζικό λογαριασμό (real subject).

Η δομή του Proxy Pattern

  • Subject (Διεπαφή/Interface): Ορίζει την κοινή διεπαφή μεταξύ του Client και του Proxy, ώστε ο Proxy να μπορεί να χρησιμοποιηθεί οπουδήποτε αναμένεται το πραγματικό αντικείμενο.
  • RealSubject (Πραγματικό Αντικείμενο): Το πραγματικό αντικείμενο που εκτελεί την ουσιαστική λογική, το οποίο όμως μπορεί να είναι “βαρύ” ή να χρειάζεται έλεγχο πρόσβασης.
  • Proxy (Μεσολαβητής): Διατηρεί μια αναφορά (reference) στο RealSubject. Υλοποιεί την ίδια διεπαφή, ελέγχει την πρόσβαση και προωθεί τα αιτήματα στο RealSubject όταν χρειάζεται.

Περιπτώσεις που χρησιμοποιείται

  • Virtual Proxy (Εικονικός Μεσολαβητής): Όταν το πραγματικό αντικείμενο είναι “βαρύ” (π.χ. φόρτωμα μιας τεράστιας εικόνας ή σύνδεση σε βάση δεδομένων). Ο Proxy καθυστερεί τη δημιουργία του μέχρι να χρειαστεί πραγματικά (Lazy Initialization).
  • Protection Proxy (Μεσολαβητής Προστασίας): Όταν θέλουμε να ελέγξουμε τα δικαιώματα πρόσβασης (Authorization) ενός χρήστη πριν του επιτρέψουμε να καλέσει μια μέθοδο.
  • Remote Proxy (Απομακρυσμένος Μεσολαβητής): Όταν το πραγματικό αντικείμενο βρίσκεται σε διαφορετικό reference space (π.χ. σε άλλον server) και ο Proxy αναλαμβάνει τη δικτυακή επικοινωνία (RMI, RPC).
  • Logging/Caching Proxy: Για να κρατάμε ιστορικό (logs) των κλήσεων ή για να αποθηκεύουμε αποτελέσματα (cache) ώστε να μην ξαναεκτελείται μια κοστοβόρα λειτουργία.
oop/proxy_pattern.1779701589.txt.gz · Last modified: 2026/05/25 09:33 by gthanos