学习笔记:空对象模式
模式简介
:在此模式中,使用一个空对象取代NULL对象实例的检查。
为什么用
:一般使用NULL作为空值,但是使用空对象,提供一个具有默认行为的对象更合适。
怎么样用
:对正常的对象提供默认的实现方法就行了。
注意事项
:默认对象可以用来实现一些其他的功能。
实际举例
:游戏正常账号和封禁账号。
#include <iostream>
#include <vector>
using namespace std;
//账号
class User {
protected:
string id;
public:
User(string id) {
this->id = id;
}
//评论权
virtual void comment() {
cout << "待实现的方法\n";
}
};
//封禁账号
class User_Banned :public User{
public:
User_Banned(string id):User(id) {}
void comment() {
cout <<"["<<id<<"]"<< "账号已被封禁,无法评论\n";
}
};
//正常账号
class User_Normal :public User {
public:
User_Normal(string id) :User(id) {}
void comment() {
cout << "[" << id << "]" << "执行评论功能\n";
}
};
class UserManager {
private:
vector<string>Banned_ID;
public:
UserManager() {
Banned_ID.push_back("moota");
}
User* getUser(string id) {
bool result = false;//是否封禁
int size = Banned_ID.size();
for (int i = 0; i < size; ++i) {
if (id == Banned_ID[i]) {
result = true;
}
}
if (result == true) {
return new User_Banned(id);
}
else {
return new User_Normal(id);
}
}
};
int main(){
UserManager userManager;
//封禁账号
User* user1 = userManager.getUser("moota");
user1->comment();
//非封禁账号
User* user2 = userManager.getUser("vicky");
user2->comment();
return 0;
}