Heim Java javaLernprogramm Java Design Patterns – Darstellungsmuster

Java Design Patterns – Darstellungsmuster

Feb 06, 2017 am 11:44 AM

Übersicht

Das Erscheinungsmuster, über das ich heute sprechen werde, ist ein relativ einfaches Designmuster. In der täglichen Entwicklung verwenden Sie es möglicherweise auch von Zeit zu Zeit, aber Sie haben vielleicht nicht gedacht, dass es eins ist Designmodell. Dieser Artikel beginnt mit einigen Beispielen, um den in diesem Artikel erläuterten Darstellungsmodus so umfassend wie möglich zu erläutern. Ich hoffe, es ist für Sie von Vorteil.

Einleitung

Der Zweck des Einfügens eines Zitats hier besteht darin, Sie daran zu erinnern, wann Sie das Erscheinungsmuster in Ihrer täglichen Entwicklung verwenden.

Vielleicht wird Ihr Chef eine solche Aufgabe für Sie arrangieren. Dies kann ein Kernmodul sein, und das Modul wird eine seiner Funktionen haben, aber Ihr Chef möchte möglicherweise nur, dass Sie ihm eine Schnittstelle zum Aufrufen zur Verfügung stellen. Er wird Ihnen Folgendes sagen: Hallo Xiao Ming, unser aktuelles System benötigt eine Kernfunktion P0, damit Sie sie implementieren können. Sie müssen mir nur eine Schnittstelle geben, die ich aufrufen kann. Ich muss die interne Logik Ihres Codes nicht kennen. Tun Sie es einfach.

Wenn Ihnen solche Aufgaben oft zugewiesen werden, sollten Sie meiner Meinung nach den Erscheinungsmodus beherrschen.

Definition

Das Erscheinungsmuster stellt eine einheitliche Schnittstelle für den Zugriff auf eine Gruppe von Schnittstellen in einem Subsystem bereit. Das Fassadenmuster definiert eine High-Level-Schnittstelle, die die Verwendung von Subsystemen erleichtert.

Nicht-Erscheinungsmodus

Hier verwende ich das Beispiel aus dem Buch „Dahua Design Patterns“. Stellen Sie sich nun vor, Sie wären ein Aktieninvestor (der Blogger handelt nur nicht mit Aktien und ich weiß nicht, ob hier etwas nicht stimmt. Wenn ja, tun Sie einfach so, als hätten Sie es nicht gesehen. ^_^) , und Sie möchten einige Finanzmanagementaktivitäten durchführen. Sie interessieren sich für zwei Aktien, eine Staatsanleihe und eine Immobilie.

Wenn Sie diesen Code jetzt schreiben würden, könnte Ihr Code-Framework wie das folgende Klassendiagramm aussehen:

Java Design Patterns – Darstellungsmuster

Aufgrund der Logik werden hier nur Aktien aufgeführt anderer Finanzmanagementaktivitäten steht im Einklang mit der Logik der Bestände. Redundanter Code hat nicht mehr Vorteile als den Platzbedarf.

StockA.java

public class StockA {
    private int stockCount = 0;
    public void sell(int count){
        stockCount -= count;
        System.out.println("卖了" + count + "支 A 股票");
    }

    public void buy(int count){
        stockCount += count;
        System.out.println("买了" + count + "支 A 股票");
    }
    public int getStockCount() {
        return stockCount;
    }
}
Nach dem Login kopieren

Der folgende Code ist für Finanzmanager gedacht. Für eine einfache Kauf- und Verkaufslogik müssen Finanzmanager so viel Codeverarbeitung aufwenden.

Investors.java

public class Investors {

    public static void main(String[] args) {
        StockA stockA = new StockA();
        StockB stockB = new StockB();
        NationalDebt debt = new NationalDebt();
        RealEstate estate = new RealEstate();

        stockA.buy(100);
        stockB.buy(200);
        debt.buy(150);
        estate.buy(120);

        stockA.sell(100);
        stockB.sell(200);
        debt.sell(150);
        estate.sell(120);
    }
}
Nach dem Login kopieren

Der oben genannte Code wurde ohne Verwendung des Darstellungsmodus geschrieben. Mit anderen Worten: Der unten erwähnte Darstellungsmodus kann den Code einfacher und klarer machen.

Darstellungsmodus

Im obigen Nicht-Erscheinungsmodus sehen wir eine Codelogik, die nicht sehr benutzerfreundlich ist. Der Darstellungsmodus kann auf einer höheren Kapselungsebene basieren, um für den Anrufer transparenter zu sein. Das Folgende ist das modifizierte Erscheinungsmodus-Klassendiagramm:

Java Design Patterns – Darstellungsmuster

FundFacade.java

public class FundFacade {

    private StockA stockA = null;
    private StockB stockB = null;
    private NationalDebt debt = null;
    private RealEstate estate = null;

    public FundFacade() {
        stockA = new StockA();
        stockB = new StockB();
        debt = new NationalDebt();
        estate = new RealEstate();
    }

    public void buyAll(int count) {
        stockA.buy(count);
        stockB.buy(count);
        debt.buy(count);
        estate.buy(count);
    }

    public void sellAll(int count) {
        stockA.sell(count);
        stockB.sell(count);
        debt.sell(count);
        estate.sell(count);
    }

    public void buyStockA(int count) {
        stockA.buy(count);
    }

    public void sellNationalDebt(int count) {
        debt.sell(count);
    }
}
Nach dem Login kopieren

Der obige Code ist die Kernklasse des Aussehens: FundFacade. Alle Vorgänge im Finanzmanagementsystem können über diese Klasse implementiert werden. Mit diesem Kurs können Sie problemlos Finanzmanagementprojekte wie Aktien, Staatsanleihen und Immobilien durchführen, ohne sich Gedanken über deren Verarbeitung machen zu müssen. Das ist eine gute Sache für die Benutzer, nicht wahr?

Werfen wir einen Blick auf die Bedienung des Benutzers (natürlich spiegelt das obige Diagramm die meisten Effekte wider). Dies ist die Codelogik des Benutzers:

Investors.java

public class Investors {

    public static void main(String[] args) {
        FundFacade facade = new FundFacade();
        facade.buyAll(120);
        facade.buyStockA(50);
        facade.sellAll(80);
    }
}
Nach dem Login kopieren

Sehen Sie, der Benutzer muss der FundFacade-Klasse nur mitteilen, was er kaufen, was er verkaufen, wie viel er kaufen und wie viel er verkaufen soll, und schon kann der Zweck erreicht werden. Es ist so praktisch.

Sehen Sie sich den Code von Bestand A an. Tatsächlich gibt es keine wesentlichen Änderungen. Dies ist auch der Reiz des Darstellungsmodus. Sie müssen den Code des ursprünglichen Subsystems nicht ändern. Sie müssen nur eine Sache tun und eine Kapselung auf höherer Ebene erstellen. Natürlich habe ich hier einige einfache Änderungen vorgenommen, um auf StockA zuzugreifen. Da es für Benutzer transparent sein muss, muss mein Subsystem nicht mehr für Benutzer offen sein, oder? Weil wir bereits professionelle Diplomaten haben – FundFacade.

StockA.java

class StockA {
    private int stockCount = 0;
    void sell(int count){
        stockCount -= count;
        System.out.println("卖了" + count + "支 A 股票");
    }

    void buy(int count){
        stockCount += count;
        System.out.println("买了" + count + "支 A 股票");
    }
    int getStockCount() {
        return stockCount;
    }
}
Nach dem Login kopieren

Darstellungsmuster ist ein relativ einfaches Designmuster, das Sie leicht beherrschen und verwenden können. Ich möchte nur sagen, dass der Darstellungsmodus auch gewisse Einschränkungen hat. Ich glaube, Sie haben es entdeckt.

Da wir alle Operationen auf dem Subsystem an die FundFacade-Klasse übergeben, sind wir durch die FundFacade-Klasse eingeschränkt. Die obige FundFacade-Klasse implementiert beispielsweise keine separaten Operationen für StockB, sodass wir nicht nur für StockB arbeiten können, es sei denn, Sie kapseln eine Schnittstelle zum Betrieb von StockB in der FundFacade-Klasse.

Anwendung des Darstellungsmodus

In der obigen Beschreibung wissen wir nicht nur, wie man den Darstellungsmodus verwendet, sondern verstehen auch die Einschränkungen des Darstellungsmodus, daher sollten wir eine objektive Haltung einnehmen und selektiv vorgehen Benutze es. Hier ist ein Beispiel dafür, wie ich den Darstellungsmodus in meiner Arbeit verwende.

Der Chef des aktuellen Projekts hat mich gebeten, ein bestimmtes Modul in einem System zu implementieren. Ich denke, das sollte ein Kernmodul sein. Die Funktion dieses Moduls besteht darin, zu prüfen, ob alle Dateien in einem Ordner vertrauliche Informationen enthalten. Es wird viele kleine Untermodule in diesem Modul geben (natürlich ist es dem Chef egal, was diese Untermodule tun), wie z. B. Mustervergleich von AC-Automaten, vollautomatische Dekomprimierung komprimierter Dateien, verschiedene Formatdateien (doc/xls /ppt/zip/eml/rtf/pdf usw., die meisten Dateiformate sind grundsätzlich vorhanden), Protokollsystem usw.

Ich kann dem Chef unmöglich sagen, dass die Funktion, die Sie erledigen möchten, das ist, was Sie zuerst tun sollten, was Sie als nächstes tun sollten, was Sie als nächstes tun sollten, was Sie noch einmal tun sollten...

Oh, oh mein Gott. Es ist so nervig, kannst du es zusammenfassen? (Natürlich sind dies nur meine mentalen Aktivitäten. Tatsächlich habe ich den Chef nicht gebeten, meinen Entwurfsprozess zu erklären.)

Nach der Kapselung muss ich dem Chef nur sagen, dass er diese Methode dieser Klasse aufrufen soll Es wird in Ordnung sein. Auf diese Weise muss sich der Chef nicht um die interne Logik kümmern. Es liegt zwar in Ihrer Verantwortung, wenn etwas schief geht, aber es sollte in Ihrer Verantwortung liegen. Ha ha. . .

Okay, das war's mit dem Blödsinn. Unabhängig davon, ob es sich um die ausführliche Erklärung des schwerwiegenden Musters oben oder um den Unsinn unten handelt, hoffe ich, dass Sie damit das Entwurfsmuster in diesem Artikel vollständig verstehen, lernen und rational verwenden können.

Das Obige ist der Inhalt des Java-Designmusters – Erscheinungsmuster. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Quadratwurzel in Java Quadratwurzel in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Quadratwurzel in Java. Hier diskutieren wir anhand eines Beispiels und seiner Code-Implementierung, wie Quadratwurzel in Java funktioniert.

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Armstrong-Zahl in Java Armstrong-Zahl in Java Aug 30, 2024 pm 04:26 PM

Leitfaden zur Armstrong-Zahl in Java. Hier besprechen wir eine Einführung in die Armstrong-Zahl in Java zusammen mit einem Teil des Codes.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

See all articles