Frage

In einem Tool wie Photoshop gibt es eine Auswahl an Tools, auf die Sie klicken können (z. B. Stift, Pinsel usw.). Sobald Sie auf ein Werkzeug klicken, können Sie dieses Werkzeug verwenden, um zu malen, usw. zu löschen, je nachdem, welches Werkzeug ausgewählt ist.

Ich frage mich, wie das in einem OO -Design am besten implementiert werden würde. Ich könnte nur daran denken, einen Guimanager zu haben, der immer weiß, welches Tool ausgewählt ist. Wenn der Leinwand (Zeichnungsbereich) einen Mausklick oder Maus erkennen, fragt Guimanager, welches Tool ausgewählt ist, und wendet das Verhalten dieses Tools an.

Beschreibt jemand eine mögliche Lösung im Detail der Klassenebene (oder detailliert, wenn Sie keine Zeit haben).

War es hilfreich?

Lösung

Schauen Sie sich das an die Zustandsmuster Welches hat genau Ihr Beispiel.

Es ist jedoch keine GUI-Frage, sondern mehr zu einem objektorientierten Ansatz, um dieses Problem zu modellieren. Die GUI spielt nicht wirklich in das.

Andere Tipps

Ich bin mir nicht sicher, ob die OO -Prinzipien wirklich in dieses Spiel einhalten, außer in dem Sinne, dass alle grafischen Elemente wahrscheinlich aus gemeinsamen Basisklassen in Ihrer GUI Ihrer Wahl abgeleitet werden.

Die Komplexität in einer Anwendung, die eine Hierarchie der Bildschirmmenüs à la Photoshop benötigt, würde vermutlich den Unterschied zwischen Komposition und Vererbung im Vergleich zu Funktionen im Funktionsstil im Schwindel stellen.

Sollten Sie motiviert sein, das Programm zweimal mit verschiedenen Stilen zu schreiben, ist es möglicherweise interessant, die Ergebnisse zu sehen. Das Ranking verschiedener Programmierstile ist zu diesem Zeitpunkt eine offene Frage ohne wirkliche Antworten, obwohl wir der Meinung sind, dass OO-Stile in einer Weise wichtig sind, die wir noch nicht vollständig quantifiziert haben.

Eine Idee dafür wäre, einen Werkzeugkurs zu haben. Nur in C ++ skizzieren-wie Pseudocode:

class Tool
{
public:
    // Keep a pointer to the "document", i.e. some representation of the
    // image you are editing
    Tool(Document *pDoc);

    // Process mouse events -- this need to be overridden to execute
    // the appropriate behaviour depending on the concrete type of tool
    virtual void OnMouseEvent(const MouseEvent &e) = 0;

    // and so on
};

Sie erben dann von dieser abstrakten Werkzeugklasse, um die konkreten Tools für Ihre Anwendungsanforderungen bereitzustellen. Wenn ein bestimmtes Tool ausgewählt ist, instanziieren Sie ein entsprechendes Werkzeugobjekt und merken sich irgendwo daran. Das Fenster leitet die Mausereignisse an das aktuell aktive Werkzeugobjekt weiter, das dann das angemessene für das ausgewählte Tool ausführt.

Dies ist eine Implementierung des staatlichen Musters, auf das Johannes bezieht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top