享元模式

享元模式

1.何为享元模式

​ 运用共享技术有效地支持大量细粒度对象,本质上是一种节约内存空间的技术,具体实现多种多样。池化技术便是享元模式的应用。

2.享元模式的意义和使用场景

​ 享元模式通常用于具有大量非常相似的对象的场景。它使用对象共享的方法来避免创建大量的对象,从而节约内存。

3.享元模式的实现

​ 享元模式的实现多种多样,核心是对象共享。要注意对象状态的处理。下面是一种实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 抽象享元类
class Shape {
public:
virtual void draw() = 0;
};
// 具体享元类 - 圆形
class Circle : public Shape {
private:
int x, y, radius;
std::string color;
public:
void draw() override {
}
};
// 享元工厂类
class ShapeFactory {
private:
std::map<std::string, Shape*> shapes; // 存储已经创建的享元对象

public:
// 获取一个圆形享元对象
Shape* getCircle(const std::string& color) {
if (shapes.find(color) == shapes.end()) {
// 如果还没有指定颜色的圆形对象,则创建一个新的,并添加到已创建的对象中
shapes[color] = new Circle(0, 0, 10, color);
}
return shapes[color];
}
};