設計模式C++實現:管理者模式
阿新 • • 發佈:2019-01-07
動機:為管理一組相關物件的例項化和訪問提供統一的介面。管理者使用和擴充套件單例模式,它們本身就是單例,並且它們可能確保它們管理的物件是唯一的。
程式碼示例:
#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;
}
優缺點:
優點:為一組相關的物件提供一個統一的全域性訪問點,同時可以提供一些簡潔的介面來獲取和操作這些物件。同時,可以優化執行時效能。
缺點:由於管理者大多采用單例模式,所以,它繼承了單例模式所有的缺點。
總結:
管理者模式是其他一些模式(如單例、外觀和控制器)的融合與一般化。凡那些物件,在執行時建立的時間開銷特別大時,而又要經常重複使用時,都可以採取此模式來提高執行時效能。