23种设计模式C++源码与UML实现--享元模式
生活随笔
收集整理的這篇文章主要介紹了
23种设计模式C++源码与UML实现--享元模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
享元模式
Flyweight模式也叫做享元模式,是構造型模式之一,他通過與其他類似對象共享數據來減少內存占用。
抽象享元模式:
所有具有享元類的父親,規定一些需要實現的公共接口。
具體享元角色:
抽象享元角色的具體實現類,并實現了抽象享元角色規定的方法
享元工廠角色:
負責創建和管理享元角色
使用場景:
以共享的方式,高效支持大量的細粒度的對象
// // Created by andrew on 2020/11/22. // #include <iostream> #include <string> #include <map> #include <utility>using namespace std;class Person { public:Person(string name, int age) {this->age = age;this->m_name = std::move(name);}// 默認形式的定義virtual ~Person()= default;virtual void printT() = 0;protected:string m_name;int age; };class Teacher : public Person { public:Teacher(string name, int age, string id) : Person(name, age) {this->m_id = id;}void printT() override {cout << "name:" << m_name << "age:" << age << "m_id:" << m_id << endl;}private:string m_id; };// 完成 老師節點 儲存 class FlyweightTeacherFactory { public:FlyweightTeacherFactory() {map1.clear();}~FlyweightTeacherFactory() {while (!map1.empty()) {Person *tmp = NULL;auto it = map1.begin();// map的第二個元素就是Teachertmp = it->second;map1.erase(it); // 將第一個節點從容器中刪除delete tmp;}}// 保持所有的數據只有一份Person *GetTeacher(string id) {Person *tmp = NULL;map<string, Person *>::iterator it;it = map1.find(id);if (it == map1.end()) { // 結尾string tmpname;int tmpage;cout << "enter teacher name:";cin >> tmpname;cout << "enter age";cin >> tmpage;tmp = new Teacher(tmpname, tmpage, id);map1.insert(pair<string, Person *>(id, tmp));} else{tmp = it->second;}return tmp;}private:map<string, Person *> map1; };int main(int argc, char *argv[]) {Person *p1 = NULL;Person *p2 = NULL;FlyweightTeacherFactory *fwtf = new FlyweightTeacherFactory;p1 = fwtf->GetTeacher("001");p1->printT();p2 = fwtf->GetTeacher("001");p2->printT();delete fwtf;cout << "flyweight demo" << endl;return 0; }總結
以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--享元模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 23种设计模式C++源码与UML实现--
- 下一篇: 作者:朱凤华,男,博士,现任中国科学院自