Designmuster-Dekorationsmuster-C++

Dekorationsmodus: Verknüpfen Sie Objekte dynamisch mit Verantwortlichkeiten.

Merkmale: 1. Kombinationsmethode anwenden. 2. Sowohl der Dekorateur als auch das dekorierte Objekt haben dieselbe Superklasse.

Nachteile: 1. Es werden viele kleine Kategorien generiert und der Code sieht komplizierter aus.

Aus der obigen Beschreibung geht hervor, dass das Dekorationsmuster vier Arten von Klassen haben sollte:

1. Superklasse. Es handelt sich um eine Basisklasse, die sowohl der Dekorateur als auch der Dekorierte erben sollten.

2. Die spezifische dekorierte Klasse.

3. Abstrakter Dekorateur.

4. Spezifische Dekorateure.

Im Folgenden finden Sie eine Beschreibung des Milchtees in einem Milchteeladen:

Zunächst definieren wir eine Superklasse, um die allgemeinen Eigenschaften dieses Milchtees zu beschreiben.

1. Der Preis, zu dem Milchtee verkauft werden muss. 2. Um welche Art von Milchtee handelt es sich?

Klasse TeaMilk

{

        string getTeaMilkDescription(); //Zum Beispiel Fruchtmilchtee, Milchmilchtee usw.

        virtual double cost() = 0; //Für wie viel muss dieser Milchtee verkauft werden?

}; 

2. Die spezifische dekorierte Klasse. Definieren Sie zwei spezifische Kategorien, eine für Fruchtmilchtee und eine für Milchmilchtee.

Klasse FruitsTeaType:public TeaMilk

{

        öffentlich:

        FruitsTeaType();

        ~FruitTeaType ();

        string getTeaMilkDescription(); //Beschreibung

        double cost(); //Preis

};

Klasse MilkTeaType: öffentliches TeaMilk

{

        öffentlich:

        MilkTeaType();

        ~MilkTeaType();

        string getTeaMilkDescription(); //Beschreibung

        double cost(); //Preis

}

3. Dekorative abstrakte Klasse. Diese abstrakte Klasse wird hauptsächlich für dynamische Bindungen verwendet und verweist von der übergeordneten Klasse auf verschiedene Unterklassen.

Klasse CondimentDecorator: öffentliches TeaMilk

{

        virtueller String getTeaMilkDescription(); //Description

};

4. Spezifische Dekoratoren. Fügen Sie zum Beispiel Zitrone (Lenmon), Sahne (Schlagsahne) zum Milchtee usw. hinzu.

Klasse Lenmon: öffentlicher CondimentDecorator

{

        öffentlich:

        Lenmon(TeaMilk *tea); //Beachten Sie, dass die Konstruktorklasse das zu dekorierende Objekt übergeben muss.

        ~Lenmon();

        string getTeaMilkDescription(); //Beschreibung

        double cost(); //Preis

}

// Beachten Sie, dass Sie bei der Implementierung zuerst das eingehende Dekoratorobjekt abrufen und es dann basierend auf dem Dekorator hinzufügen müssen.

Klasse Whip: öffentlicher CondimentDecorator

{

        öffentlich:

        Whip (TeaMilk *tea); //Beachten Sie, dass die Konstruktorklasse das zu dekorierende Objekt übergeben muss.

        ~Peitsche ();

        string getTeaMilkDescription(); //Beschreibung

        double cost(); //Preis

}

Beispielanzeige

int main()

{

        TeaMilk *fruitsType = new FruitsTeaType(); //Fruchttyp-Milchtee.

        MilkTeaType *milkType = new MilkTeaType(); // Milchtee vom Typ Milch

        //Der Preis für Früchtetee mit Sahne

        TeaMilk *fruitsWhip = new Whip(fruitsType );

        furitsWhip.cost(); //Preis für Fruchtcremetee

        //Der Preis für Früchtetee mit Sahne und Zitrone

        TeaMilk *allFruits = new Lenmon (fruitsWhip );

        allFruits.cost(); //Der Preis für das Hinzufügen von Sahne und Zitrone

        

        0 zurückgeben;

}

Supongo que te gusta

Origin blog.csdn.net/dreamliweiming/article/details/127862466
Recomendado
Clasificación