Heim  >  Artikel  >  Backend-Entwicklung  >  C++-Entwurfsmuster – kurze Einführung in das Fliegengewichtsmuster

C++-Entwurfsmuster – kurze Einführung in das Fliegengewichtsmuster

黄舟
黄舟Original
2017-01-17 13:27:001378Durchsuche

Fliegengewicht: Nutzen Sie die Sharing-Technologie, um eine große Anzahl feinkörniger Objekte effektiv zu unterstützen.

Vier Rollenklassen:

Fliegengewichtsklasse: Die Superklasse oder Schnittstelle aller spezifischen Fliegengewichtsklassen. Über diese Schnittstelle kann Fliegengewicht externe Zustände akzeptieren und darauf reagieren.

Flyweight Flyweight Factory-Klasse: Eine Flyweight-Factory, die zum Erstellen und Verwalten von Flyweight verwendet wird. Wenn der Benutzer ein Flyweight anfordert, stellt das FlyweightFactory-Objekt eine erstellte Instanz bereit oder erstellt eine (falls nicht vorhanden).

ConcreteFlyweight Betonfliegengewichtsklasse: Erben Sie die Flyweight-Superklasse oder implementieren Sie die Flyweight-Schnittstelle und fügen Sie Speicherplatz für den internen Status hinzu.

UnSharedConcreteFlyweight bezieht sich auf bestimmte Flyweight-Unterklassen, die nicht gemeinsam genutzt werden müssen, und bezieht sich auf die Flyweight-Unterklassen, die nicht gemeinsam genutzt werden müssen. Da die gemeinsame Nutzung von Flyweight-Schnittstellenklassen möglich, aber nicht zwingend erforderlich ist.

Musterimplementierung:

[code]//享元类
class Flyweight{
public:
    virtual void Operation(int extrinsicState){}
};

//具体享元类
class ConcreteFlyweight: public Flyweight{
public:
    virtual void Operation(int extrinsicState)override{
        std::cout << "ConcreteFlyweight: " << extrinsicState << std::endl;
    }
};

//不需共享的Flyweight子类
class UnSharedConcreteFlyweight: public Flyweight{
public:
    virtual void Operation(int extrinsicState){
        std::cout << "UnSharedConcreteFlyweight: " << extrinsicState << std::endl;
    }
};

//享元工厂,用来创建并管理Flyweight对象
class FlyweightFactory{
private:
    std::map<std::string, Flyweight*> flyweights;
public:
    FlyweightFactory(){
        flyweights["X"] = new ConcreteFlyweight;
        flyweights["Y"] = new ConcreteFlyweight;
        flyweights["Z"] = new ConcreteFlyweight;
    }
    Flyweight* GetFlyweight(std::string key){
        return (Flyweight*)flyweights[key];
    }
};

Kunde:

[code]//Client
int main(){
    //外部状态
    int extrinsicState = 22;
    //工厂
    FlyweightFactory *f = new FlyweightFactory;
    Flyweight* fx = f->GetFlyweight("X");
    fx->Operation(--extrinsicState);  //Output: ConcreteFlyweight: 21

    Flyweight* fy = f->GetFlyweight("Y");
    fy->Operation(--extrinsicState);  //Output: ConcreteFlyweight: 20

    Flyweight* fz = f->GetFlyweight("Z");
    fz->Operation(--extrinsicState);  //Output: ConcreteFlyweight: 19

    Flyweight *uf = new UnSharedConcreteFlyweight;  //Output: UnSharedConcreteFlyweight: 18
    uf->Operation(--extrinsicState);

    return 0;
}

Vorteile des Flyweight-Musters:

Wenn eine Anwendung eine große Anzahl von Objekten verwendet, die sollte in Betracht gezogen werden, wenn eine große Anzahl dieser Objekte einen großen Speicheraufwand verursacht.

Die meisten Zustände eines Objekts können den externen Zustand verwenden. Wenn der externe Zustand eines Objekts gelöscht wird, können viele Gruppen von Objekten durch relativ wenige gemeinsam genutzte Objekte ersetzt werden.

Das Obige ist der Inhalt der kurzen Einführung in das C++-Designmuster zum Fliegengewichtsmuster. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
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