松垮垮 松垮垮
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

松垮垮

c++后端开发工程师
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式

    • Adapter(适配器模式、包装模式)
    • Bridge桥接模式
    • Builder建造者模式
    • Chain
    • Command命令模式
    • Composite组合模式
    • Decorator装饰者
    • Façade门面模式(外观模式)
    • Flyweight享元模式
    • Interpreter解释器模式
    • Iterator迭代器
    • Mediator中介者模式(仲裁者模式)
    • Memento备忘录模式
    • Observer观察者模式
    • Prototype原型
    • Proxy代理模式
    • Singleton单例模式
    • State状态模式
    • Strategy战略
    • Template
    • Visitor访问者模式
    • •Abstract
    • •Factory
    • 依赖注入(控制反转IoC)
    • 概论
    • 设计模式
  • 工具和开发
  • 设计模式
songkuakua
2025-02-15

Flyweight享元模式

# Flyweight享元模式

Owner: -QVQ-

结构型的软件设计模式,通过共享对象的方式,尽可能减少内存占用

打麻将,同时有10桌在玩,每桌都有4个"八筒",如果建立40个"八筒"对象,那就非常冗余,但如果用享元模式建立一套麻将牌,每桌打出"八筒"时,就调用享元中的"八筒",相当于只用了1个对象, 桌号和牌号就是享元模式的外蕴状态,如A1八筒,就是A桌的第一个"八筒",A和1是外蕴状态;而卡牌"八筒"本身就是内蕴状态,内蕴是可以共享的

享元模式的优点:

  1. 减少资源浪费。共享资源极大程度降低了系统的资源消耗。
  2. 提高系统运行效率。当资源过度使用时,系统效率会大受影响。

享元模式的缺点:

  1. 维护共享对象,需要额外开销。
  2. 系统复杂度提高。运行享元,除了内外状态,还有线程方面都要充分考虑 Untitled

代码

// 抽象享元
class Flyweight{
	virtual void operation() {
		cout << "打出" << m_name << endl;
	}
	string m_name;
}
// 具体享元
class ConcreteFlyweight : public Flyweight{
	virtual void operation() {
		cout << "打出" << m_name << endl;
	}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

享元工厂存放所有的具体享元,并对相同内容的具体享元只分配一个空间

// 享元工厂
class FlyweightFactory 
{
// 获取享元
	Flyweight* getFlyweight(string name) {
		// 若没有,则创建
		if (flyweights.find(name) == flyweights.end()) {
			cout << "创建" << name << "牌" << endl;
			flyweights[name] = new ConcreteFlyweight(name);
		}
		else {
			cout << "已有" << name << "牌" << endl;
		}
		return flyweights[name];
	}
	std::unordered_map<string, Flyweight*> flyweights;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

客户

FlyweightFactory *factory = new FlyweightFactory();
	Flyweight* f1 = factory->getFlyweight("乾");
	Flyweight* f2 = factory->getFlyweight("坤");
	Flyweight* f3 = factory->getFlyweight("坎");
	Flyweight* f9 = factory->getFlyweight("坤");
//这里"坤"不会再申请空间,而是返回上一个坤的空间,从而复用了内存
1
2
3
4
5
6
上次更新: 2025/02/21, 14:57:10
Façade门面模式(外观模式)
Interpreter解释器模式

← Façade门面模式(外观模式) Interpreter解释器模式→

最近更新
01
搭建ai知识助手
02-23
02
边缘检测
02-15
03
css
02-15
更多文章>
Theme by Vdoing | Copyright © 2025-2025 松垮垮 | MIT License | 蜀ICP备2025120453号 | 川公网安备51011202000997号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 纯净模式