Dieser Artikel bietet Ihnen eine Einführung in den Darstellungsmodus und den Dekorationsmodus in Java-Designmustern. Ich hoffe, er wird Ihnen als Referenz dienen.
Im vorherigen Artikel haben wir etwas über den Adaptermodus und den Bridge-Modus des Strukturmodus gelernt. In diesem Artikel lernen wir den Erscheinungsmodus und den Dekorationsmodus des Strukturmodus kennen.
Einführung
Der Fassadenmodus verbirgt die Komplexität des Systems und stellt dem Kunden eine Schnittstelle zur Verfügung, über die der Kunde auf das System zugreifen kann . Bei dieser Art von Entwurfsmuster handelt es sich um ein Strukturmuster, das einem vorhandenen System eine Schnittstelle hinzufügt, um die Komplexität des Systems zu verbergen.
Einfach ausgedrückt stellt es eine einfache Schnittstelle zur Außenwelt bereit und verbirgt die Implementierungslogik. Mit dem Netzschalter eines häufig verwendeten Computers müssen wir beispielsweise nur den Netzschalter drücken, um ihn zu starten oder herunterzufahren. Wir müssen nicht wissen, wie er gestartet wird (Starten der CPU, Starten des Speichers, Starten der Festplatte). Festplatte) oder wie man herunterfährt (Ausschalten der Festplatte, Ausschalten des Speichers usw.);
Hier können wir noch das Beispiel des Spielens auf einem Computer verwenden, um Darstellungsmodus für eine einfache Erklärung.
Es gibt einige Online-Spiele auf dem Computer, darunter DNF, LOL und WOW. Wir müssen nur auf das Symbol auf dem Computer doppelklicken, um das Spiel zu starten und zu spielen läuft.
Die Schritte, die implementiert werden müssen, sind wie folgt:
Richten Sie die Spieloberfläche ein;
Richten Sie die Klassen ein LOL, DNF und WOW implementieren die Spielschnittstelle;
definieren eine vom Client aufzurufende Erscheinungsklasse.
Rufen Sie den Auftrittskurs an.
Codebeispiel:
interface Game{ void play(); } class DNF implements Game{ @Override public void play() { System.out.println("正在玩DNF..."); } } class LOL implements Game{ @Override public void play() { System.out.println("正在玩LOL..."); } } class WOW implements Game{ @Override public void play() { System.out.println("正在玩WOW..."); } } class Computer{ private Game dnf; private Game lol; private Game wow; public Computer() { dnf=new DNF(); lol=new LOL(); wow=new WOW(); } public void playDNF(){ dnf.play(); } public void playLOL(){ lol.play(); } public void playWOW(){ wow.play(); } } public static void main(String[] args) { Computer computer=new Computer(); computer.playDNF(); computer.playLOL(); computer.playWOW(); }
Ergebnis ausführen:
正在玩DNF... 正在玩LOL... 正在玩WOW...
Im obigen Codebeispiel: Wenn wir ein Spiel spielen möchten, müssen wir nur die Appearance Class instanziieren und darin die Spielmethode aufrufen, ohne uns darum zu kümmern, wie das Spiel startet und läuft. Darüber hinaus sind die einzelnen Spiele unabhängig voneinander und beeinflussen sich nicht gegenseitig. Nur weil ein Spiel nicht gespielt werden kann, können auch andere Spiele nicht ausgeführt werden. Tatsächlich fühlt sich der Darstellungsmodus der von uns normalerweise verwendeten Schnittstelle sehr ähnlich. Beide stellen Schnittstellen zur Außenwelt bereit, und es besteht kein Grund, sich darum zu kümmern, wie sie implementiert werden.
Vorteile des Darstellungsmodus:
Reduziert die Kopplung, was in gewisser Weise auch die Sicherheit verbessert.
Nachteile des Erscheinungsmodus:
Entspricht nicht dem Öffnungs- und Schließprinzip und ist nicht einfach zu ändern.
Nutzungsszenarien
Wenn im System mehrere komplexe Module oder Subsysteme vorhanden sind.
Einführung
Das Decorator-Muster ermöglicht das Hinzufügen neuer Funktionen zu einem vorhandenen Objekt, ohne seine Struktur zu ändern. Bei dieser Art von Entwurfsmuster handelt es sich um ein Strukturmuster, das als Hülle um eine vorhandene Klasse fungiert.
Der Dekorationsmodus besteht, wie der Name schon sagt, darin, etwas zu dekorieren, damit es einige zusätzliche Funktionen bieten kann. Zum Beispiel Menschen schmücken und unterschiedliche Kostüme tragen, wenn man unterschiedliche Dinge tut. Zum Beispiel bedeutet das Anziehen eines Trikots, dass man sich zum Ballspielen bereit macht, das Anziehen eines Badeanzugs bedeutet, dass man sich zum Schwimmen bereit macht usw.
Das Dekoratormuster kann einem Objekt dynamisch einige zusätzliche Verantwortlichkeiten hinzufügen.
Hier verwenden wir noch ein Beispiel zur Veranschaulichung.
Unter den aktuellen Spielzeugmodellen gibt es zwei sehr beliebte Modelle, GUNDAM-Modell und MrGu-Modell. Wenn wir die Modelle zusammenbauen, wird im Allgemeinen zuerst das Modell zusammengebaut und dann einige zusätzliche Accessoires, wie zum Beispiel Waffen, werden hinzugefügt. Hier haben wir das GUNDAM-Modell und das MrGu-Modell zusammengebaut und sie dann mit ihren jeweiligen Waffen ausgestattet.
Die spezifischen Implementierungsschritte sind wie folgt:
Erstellen Sie eine Modellschnittstelle aus abstrakten Komponenten mit der Assembler-Methode; >Erstellen Sie spezifische Komponentenklassen (GUNDAM-Klasse und MrGu-Klasse) und implementieren Sie die obige Modellschnittstelle
definiert einen Dekorateur, der die Anfrage des Kunden annimmt und entsprechend der Anfrage des Kunden reagiert 🎜>
Codebeispiel:
interface Model{ void assemble(); } class GUNDAM implements Model{ @Override public void assemble() { System.out.println("组装一个高达模型"); } } class MrGu implements Model{ @Override public void assemble() { System.out.println("组装一个扎古模型"); } } abstract class AddExtra implements Model{ protected Model model; public AddExtra(Model model){ this.model=model; } public void assemble(){ model.assemble(); } } class LightSaber extends AddExtra{ public LightSaber(Model model) { super(model); } public void assemble(){ model.assemble(); addLightSaber(); } public void addLightSaber(){ System.out.println("添加光剑"); } } class RocketLauncher extends AddExtra{ public RocketLauncher(Model model) { super(model); } public void assemble(){ model.assemble(); addRocketLauncher(); } public void addRocketLauncher(){ System.out.println("添加火箭筒"); } } public static void main(String[] args) { Model gundam=new GUNDAM(); Model mrgu=new MrGu(); gundam.assemble(); mrgu.assemble(); Model gModel=new LightSaber(new GUNDAM()); gModel.assemble(); Model mModel=new RocketLauncher(new MrGu()); mModel.assemble(); }
组装一个高达模型 组装一个扎古模型 组装一个高达模型 添加光剑 组装一个扎古模型 添加火箭筒
zu verwenden, einige Klassen erweitert werden können, ohne die vorherigen Funktionen zu beeinträchtigen, was die Flexibilität verbessert.
Vorteile des Dekorationsmusters:
Nachteile des Dekoratormusters:
Eine zu starke Dekoration einer Klasse erhöht die Komplexität.Nutzungsszenarien
Wenn der Prototyp unverändert bleibt und einige Funktionen dynamisch hinzugefügt werden.Verwandte Empfehlungen: Einführung in den Adaptermodus und Bridge-Modus in Java-Entwurfsmustern (Codebeispiele)
Das obige ist der detaillierte Inhalt vonEinführung in Appearance Pattern und Decorator Pattern in Java Design Patterns (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!