1. 程式人生 > >設計模式C++實現:管理者模式

設計模式C++實現:管理者模式

動機:為管理一組相關物件的例項化和訪問提供統一的介面。管理者使用和擴充套件單例模式,它們本身就是單例,並且它們可能確保它們管理的物件是唯一的。

程式碼示例:

#include <iostream>
#include <string>
#include <map>
using namespace std;
class Animal
{
public:
   virtual void eat(){cout<<"animal eat"<<endl;}
};
class Dog:public Animal
{
public:
    void
eat(){cout<<"dog eat"<<endl;} }; class Cat:public Animal { public: void eat(){cout<<"Cat eat"<<endl;} }; class AnimalManager { public: static AnimalManager* GetInstance() { if(instance == NULL) { instance = new AnimalManager(); } return
instance; } void SetAnimal(string name, Animal *animal) { m_map[name] = animal; } void GetAnimal(string name, Animal *&animal) { animal = m_map[name]; } public: typedef map<string, Animal*> AnimalMap; private: AnimalMap m_map; static
AnimalManager* instance; }; AnimalManager* AnimalManager::instance = NULL; int main () { Dog *dog1 = new Dog(); AnimalManager::GetInstance()->SetAnimal("kity", dog1); Animal *animal = NULL; AnimalManager::GetInstance()->GetAnimal("kity", animal); animal->eat(); return 0; }

優缺點:
優點:為一組相關的物件提供一個統一的全域性訪問點,同時可以提供一些簡潔的介面來獲取和操作這些物件。同時,可以優化執行時效能。
缺點:由於管理者大多采用單例模式,所以,它繼承了單例模式所有的缺點。

總結:
管理者模式是其他一些模式(如單例、外觀和控制器)的融合與一般化。凡那些物件,在執行時建立的時間開銷特別大時,而又要經常重複使用時,都可以採取此模式來提高執行時效能。