Κοινή χρήση τεχνολογίας

Μοτίβο σχεδίασης πρόσοψης

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

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

1. Ορισμός

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

2. Κίνητρο και σκοπός

  • Μειώστε την πολυπλοκότητα: Ενσωματώνοντας την πολυπλοκότητα του υποσυστήματος στην κλάση Facade, ο πελάτης μπορεί να καλέσει το υποσύστημα μέσω μιας απλής διεπαφής χωρίς να χρειάζεται να κατανοήσει σε βάθος τη συγκεκριμένη υλοποίηση του υποσυστήματος.
  • Βελτιώστε την ευκολία χρήσης: Η λειτουργία πρόσοψης παρέχει μια απλή διεπαφή, ώστε οι πελάτες να μπορούν να χρησιμοποιούν το υποσύστημα πιο εύκολα.
  • χαλαρή σύζευξη: Με την εισαγωγή της κλάσης Facade, η σύζευξη μεταξύ του πελάτη και του υποσυστήματος μειώνεται, έτσι ώστε οι αλλαγές εντός του υποσυστήματος να μην επηρεάζουν τον πελάτη.

3. Διάγραμμα δομής και τάξης

Διάγραμμα τάξης:

Η λειτουργία πρόσοψης περιλαμβάνει κυρίως τους ακόλουθους τρεις ρόλους:

  • Πρόσοψη (ρόλος εμφάνισης) : Ο πελάτης μπορεί να καλέσει τις μεθόδους αυτού του ρόλου. Οι κλάσεις πρόσοψης γνωρίζουν τις λειτουργίες και τις αρμοδιότητες των σχετικών υποσυστημάτων. Υπό κανονικές συνθήκες, αυτός ο ρόλος θα μεταβιβάσει όλα τα αιτήματα που αποστέλλονται από τον πελάτη στο αντίστοιχο υποσύστημα.
  • Υποσύστημα (ρόλος υποσυστήματος) : Μπορεί να υπάρχουν ένα ή περισσότερα υποσυστήματα ταυτόχρονα. Κάθε υποσύστημα δεν είναι μια ξεχωριστή κλάση, αλλά μια συλλογή κλάσεων. Κάθε υποσύστημα μπορεί να κληθεί απευθείας από τον πελάτη ή από τον ρόλο εμφάνισης. Το υποσύστημα δεν γνωρίζει την ύπαρξη της εμφάνισης Για το υποσύστημα, η εμφάνιση είναι απλώς ένας άλλος πελάτης.
  • Πελάτης (ρόλος πελάτη): Ο χρήστης καλεί τη συνάρτηση του υποσυστήματος μέσω της κλάσης εμφάνισης.

4. Πλεονεκτήματα και μειονεκτήματα

πλεονέκτημα
  1. Μειώστε την πολυπλοκότητα του συστήματος: Παρέχοντας μια απλή διεπαφή για υποσυστήματα, διευκολύνει τους πελάτες να κατανοήσουν και να χρησιμοποιήσουν το σύστημα.
  2. Βελτιώστε την ευελιξία του συστήματος: Όταν πραγματοποιούνται αλλαγές εντός του υποσυστήματος, μόνο η κλάση Facade χρειάζεται να τροποποιηθεί, χωρίς να τροποποιηθεί ο κωδικός πελάτη.
  3. Συμμορφωθείτε με το νόμο της Δήμητρας: Με την εισαγωγή της κλάσης Facade, μειώνεται η εξάρτηση μεταξύ του πελάτη και του υποσυστήματος.
έλλειψη
  1. Η προσθήκη υποσυστημάτων ή η επέκταση της συμπεριφοράς του υποσυστήματος μπορεί εύκολα να δημιουργήσει κινδύνους: Επειδή όλα τα αιτήματα πρέπει να προωθούνται μέσω της κλάσης Facade, εάν η κλάση Facade δεν έχει σχεδιαστεί σωστά, ενδέχεται να εισαχθούν νέοι κίνδυνοι.
  2. Δεν συμμορφώνεται με την αρχή ανοιχτού κλεισίματος: Σε ορισμένες περιπτώσεις, εάν χρειαστεί να επεκτείνετε το σύστημα, μπορεί να χρειαστεί να τροποποιήσετε τον κωδικό της κλάσης Facade, κάτι που παραβιάζει την αρχή του ανοιχτού-κλειστού (δηλαδή, ανοιχτό σε επεκτάσεις, κλειστό σε τροποποιήσεις).

5. Σενάρια εφαρμογής

  • Η λειτουργία πρόσοψης μπορεί να χρησιμοποιηθεί όταν το σύστημα χρειάζεται να παρέχει μια απλή διεπαφή με τον έξω κόσμο.
  • Το σχέδιο πρόσοψης μπορεί να χρησιμοποιηθεί όταν το σύστημα χρειάζεται να κρύψει την πολυπλοκότητα των υποσυστημάτων.
  • Όταν χρειάζεται να δημιουργήσετε μια δομή συστήματος πολλαπλών επιπέδων, μπορείτε να χρησιμοποιήσετε το αντικείμενο Facade ως είσοδο σε κάθε επίπεδο για να απλοποιήσετε τις κλήσεις επιπέδων.

6. Παραδείγματα υλοποίησης

Σε ένα σύστημα οικιακού κινηματογράφου, η λειτουργία πρόσοψης μπορεί να χρησιμοποιηθεί για να απλοποιήσει τις λειτουργίες του χρήστη. Για παράδειγμα, οι χρήστες χρειάζεται να χρησιμοποιούν μόνο ένα τηλεχειριστήριο (κατηγορία πρόσοψης) για να ελέγχουν προβολείς, ηχεία, συσκευές αναπαραγωγής DVD και άλλες συσκευές (υποσυστήματα) χωρίς να χρειάζεται να χειρίζονται αυτές τις συσκευές χωριστά.

  1. // 投影仪接口
  2. interface Projector {
  3. void on();
  4. void off();
  5. void focus();
  6. void wideScreenMode();
  7. }
  8. // 投影仪实现类
  9. class SimpleProjector implements Projector {
  10. @Override
  11. public void on() {
  12. System.out.println("Projector is on");
  13. }
  14. @Override
  15. public void off() {
  16. System.out.println("Projector is off");
  17. }
  18. @Override
  19. public void focus() {
  20. System.out.println("Adjusting projector focus");
  21. }
  22. @Override
  23. public void wideScreenMode() {
  24. System.out.println("Switching to wide screen mode");
  25. }
  26. }
  27. // DVD播放器接口
  28. interface DVDPlayer {
  29. void on();
  30. void off();
  31. void play();
  32. void stop();
  33. void pause();
  34. void eject();
  35. void setTwoChannelAudio();
  36. void setSurroundAudio();
  37. }
  38. // DVD播放器实现类
  39. class SimpleDVDPlayer implements DVDPlayer {
  40. @Override
  41. public void on() {
  42. System.out.println("DVD Player is on");
  43. }
  44. @Override
  45. public void off() {
  46. System.out.println("DVD Player is off");
  47. }
  48. @Override
  49. public void play() {
  50. System.out.println("DVD Player is playing");
  51. }
  52. @Override
  53. public void stop() {
  54. System.out.println("DVD Player stopped");
  55. }
  56. @Override
  57. public void pause() {
  58. System.out.println("DVD Player paused");
  59. }
  60. @Override
  61. public void eject() {
  62. System.out.println("DVD ejected");
  63. }
  64. @Override
  65. public void setTwoChannelAudio() {
  66. System.out.println("Stereo mode is on");
  67. }
  68. @Override
  69. public void setSurroundAudio() {
  70. System.out.println("Surround sound mode is on");
  71. }
  72. }
  73. // 音响接口
  74. interface Amplifier {
  75. void on();
  76. void off();
  77. void setStereoSound();
  78. void setSurroundSound();
  79. void setVolume(int volume);
  80. }
  81. // 音响实现类
  82. class StereoAmplifier implements Amplifier {
  83. @Override
  84. public void on() {
  85. System.out.println("Amplifier is on");
  86. }
  87. @Override
  88. public void off() {
  89. System.out.println("Amplifier is off");
  90. }
  91. @Override
  92. public void setStereoSound() {
  93. System.out.println("Stereo mode is on");
  94. }
  95. @Override
  96. public void setSurroundSound() {
  97. System.out.println("Surround sound mode is on");
  98. }
  99. @Override
  100. public void setVolume(int volume) {
  101. System.out.println("Setting volume to " + volume);
  102. }
  103. }
  104. // 家庭影院Facade类
  105. class HomeTheaterFacade {
  106. private Projector projector;
  107. private DVDPlayer dvdPlayer;
  108. private Amplifier amplifier;
  109. public HomeTheaterFacade(Projector projector, DVDPlayer dvdPlayer, Amplifier amplifier) {
  110. this.projector = projector;
  111. this.dvdPlayer = dvdPlayer;
  112. this.amplifier = amplifier;
  113. }
  114. // 提供一个简单的方法来观看电影
  115. public void watchMovie(String movie) {
  116. System.out.println("Get ready to watch a movie...");
  117. projector.on();
  118. projector.wideScreenMode();
  119. amplifier.on();
  120. amplifier.setSurroundSound();
  121. amplifier.setVolume(5);
  122. dvdPlayer.on();
  123. dvdPlayer.play(movie);
  124. System.out.println("Enjoy the movie...");
  125. }
  126. // 提供一个简单的方法来结束观看
  127. public void endMovie() {
  128. System.out.println("Shutting movie theater down...");
  129. projector.off();
  130. amplifier.off();
  131. dvdPlayer.stop();
  132. dvdPlayer.eject();
  133. dvdPlayer.off();
  134. }
  135. }
  136. class Client{
  137. public static void main(String[] args) {
  138. Projector projector = new SimpleProjector();
  139. DVDPlayer dvdPlayer = new SimpleDVDPlayer();
  140. Amplifier amplifier = new StereoAmplifier();
  141. HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(projector,dvdPlayer,amplifier);
  142. homeTheaterFacade.watchMovie("肖申克的救赎");
  143. homeTheaterFacade.endMovie();
  144. }
  145. }

Σε αυτό το παράδειγμα, μπορείτε να δείτε τη λειτουργία πρόσοψης, η οποία είναι ιδιαίτερα κατάλληλη για τη χρήση πολλαπλών στοιχείων για τη συγκέντρωση σταθερών διεργασιών και τη μείωση της πολυπλοκότητας των κλήσεων πελατών.

7. Περίληψη

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

Εάν αυτή η λειτουργία είναι χρήσιμη για εσάς, θυμηθείτε να κάνετε like και να την συλλέξετε.