User Tools

Site Tools


oop:bridge_pattern

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
oop:bridge_pattern [2026/05/25 12:33] – created gthanosoop:bridge_pattern [2026/05/25 12:46] (current) – [Παράδειγμα] gthanos
Line 184: Line 184:
 </code> </code>
  
-Η κλάση του αναβαθμισμένου τηλεχειριστηρίου, επίσης δίνεται παρακάτω:+Η κλάση ενός αναβαθμισμένου τηλεχειριστηρίου με επιπλέον λειτουργίες, επίσης δίνεται παρακάτω:
  
 <code java AdvancedRemoteControl.java> <code java AdvancedRemoteControl.java>
Line 195: Line 195:
     // 1. Η υπάρχουσα λειτουργία σίγασης     // 1. Η υπάρχουσα λειτουργία σίγασης
     public void mute() {     public void mute() {
-        System.out.println("Advanced Remote: Σίγαση συσκευής.");+        System.out.println("Advanced Remote: Setting device to silent mode.");
         device.setVolume(0);         device.setVolume(0);
     }     }
Line 201: Line 201:
     // 2. Νέα λειτουργία: Επόμενο κανάλι     // 2. Νέα λειτουργία: Επόμενο κανάλι
     public void nextChannel() {     public void nextChannel() {
-        int currentChannel = device.getChannel(); +        int currentChannel = getChannel(); 
-        device.setChannel(currentChannel + 1); +        setChannel(currentChannel + 1); 
-        System.out.println("Advanced Remote: Μετάβαση στο επόμενο κανάλι.");+        System.out.println("Advanced Remote: Next Channel.");
     }     }
  
     // 3. Νέα λειτουργία: Προηγούμενο κανάλι     // 3. Νέα λειτουργία: Προηγούμενο κανάλι
     public void previousChannel() {     public void previousChannel() {
-        int currentChannel = device.getChannel();+        int currentChannel = getChannel();
         if (currentChannel > 1) {         if (currentChannel > 1) {
-            device.setChannel(currentChannel - 1); +            setChannel(currentChannel - 1); 
-            System.out.println("Advanced Remote: Μετάβαση στο προηγούμενο κανάλι.");+            System.out.println("Advanced Remote: Previous Channel.");
         }         }
     }     }
Line 228: Line 228:
 </code> </code>
  
 +<WRAP tip 90% center round> 
 +Συνοψίζοντας, τα οφέλη αυτής της αρχιτεκτονικής είναι τα εξής: 
 +  - **Αποφυγή πολύπλοκων ιεραρχιών κλάσεων:** Αν είχαμε χρησιμοποιήσει παραδοσιακή κληρονομικότητα θα δημιουργούσαμε πολλές συνδυαστικές κλάσεις (TvBasicRemote, TvAdvancedRemote, RadioBasicRemote, RadioAdvancedRemote). Με το Bridge, κρατήσαμε τον κώδικα διαχωρισμένο σε δύο ανεξάρτητους άξονες: Τηλεχειριστήρια και Συσκευές. 
 +  - **Ανεξάρτητη Εξέλιξη (Orthogonal Extension):**  
 +    - Στην πλευρά της υλοποίησης, προσθέσαμε τις πρωτογενείς μεθόδους στο interface Device και τις κλάσεις Tv/Radio, χωρίς να επηρεαστεί η υπάρχουσα λογική των τηλεχειριστηρίων. 
 +    - Στην πλευρά της αφαίρεσης, εμπλουτίσαμε την κλάση ''RemoteControl'' με τις βασικές μεθόδους, και την κλάση ''AdvancedRemoteControl'' με σύνθετες «macro» λειτουργίες (nextChannel, cinemaMode), χωρίς να αλλάξουμε τον τρόπο που λειτουργούν εσωτερικά τα υπόλοιπα δομικά στοιχεία. 
 +  - **Επαναχρησιμοποίηση Κώδικα και Καθαρή Ιεραρχία:** Το AdvancedRemoteControl μπόρεσε να χρησιμοποιήσει τις μεθόδους getChannel() και setChannel() της γονικής του κλάσης (RemoteControl). Δεν χρειάστηκε να ξαναγράψουμε κώδικα που μιλάει απευθείας με τη συσκευή. Η λογική συγκεντρώθηκε σε ένα σημείο. 
 +  - **Επεκτασιμότητα:** Η αρχιτεκτονική αυτή είναι πλέον εξαιρετικά ευέλικτη. Αν αύριο θελήσεις να προσθέσεις 
 +    * Μια νέα συσκευή, π.χ. SmartProjector, απλά υλοποιείς το Device. Όλα τα τηλεχειριστήρια θα δουλέψουν μαζί της αμέσως. 
 +    * Ένα νέο τηλεχειριστήριο, π.χ. VoiceRemoteControl, απλά κληρονομείς το RemoteControl. Θα μπορεί να ελέγξει όλες τις υπάρχουσες συσκευές αμέσως. 
 +</WRAP>
oop/bridge_pattern.1779712425.txt.gz · Last modified: 2026/05/25 12:33 by gthanos