十分钟学会一个设计模式---结构模式---享元模式

86 阅读1分钟

对象数量过多,占用较大的内存,可考虑享元

class Person {
private:
    // 唯一标识
    string m_name;
public:
    explicit Person(const string &name):m_name(name){}
};

class PersonFactor {
private:
    // 缓存对象
    unordered_map<string, Person* > map;
public:
    Person* GetPerson(const string &name) {
        auto iter = map.find(name);
        if (iter == map.end()) {
            Person* person = new Person(name);
            map[name] = person;
            return person;
        }
        return iter->second;
    }

    ~PersonFactor() {
        for(auto it : map) {
            delete it.second;
        }
        map.clear();
    }
};
int main() {
    PersonFactor* factor = new PersonFactor;
    factor->GetPerson("123");
    delete factor;
}