已经到了作者的23个模式了
//臣子、皇帝示例
class Emperor {
private:
//设置限制皇帝个数
static const int const gs_maxNumOfEmperor;
//设置多个皇帝的实例
static vector<string> gs_strEmperor;
static vector<Emperor*> gs_Emperor;
//当前皇帝序列号
static int gs_countNumofEmperor;
public:
Emperor(string str);
static void InitEmperor();
static Emperor* GetInstance();
static void say();
};
vector<string> Emperor::gs_strEmperor;
vector<Emperor*> Emperor::gs_Emperor;
const int const Emperor::gs_maxNumOfEmperor = 2;
int Emperor::gs_countNumofEmperor = 0;
Emperor::Emperor(string str) {
gs_strEmperor.push_back(str);
}
void Emperor::InitEmperor() {
for (int i = 0; i < gs_maxNumOfEmperor; i++)
{
char buffer[10] = {0};
_itoa_s(i, buffer, 10, 10);
gs_Emperor.push_back(new Emperor(buffer));
}
}
Emperor* Emperor::GetInstance() {
gs_countNumofEmperor = rand()%2;
return gs_Emperor[gs_countNumofEmperor];
}
void Emperor::say() {
cout << gs_strEmperor[gs_countNumofEmperor] << endl;
}
class Minister {
public:
static void main() {
Emperor::InitEmperor();
for (int i = 0; i < 3; i++)
{
Emperor* emperor = Emperor::GetInstance();
emperor->say();
}
}
};
//写下这个,主要是作者写的静态接口,循环访问同一变量的设计要记住。
//more effective c++ 里面就用如此方法限制对象个数。
//感觉单例模式要限制对象,设立全局