近期总结: 最近惰性很强,项目写的也很差,博客也没有按时更新,觉得自己碌碌无为还安慰自己平凡可贵,接下来要好好整理一下最近复习和学到的知识
享元模式
一.我们为什么需要享元模式?
我们每学习一种新的设计模式,首先要明白这个模式可以干什么?该如何使用这种设计模式?
所谓的享元模式主要是用了减少创建对象的数量,用来减少内存的占用和提高性能
,总而言之就是你的程序有很多大量的对象,而且可能会造成内存溢出,甚至创建和消耗对象会成为一种负担,我们可以把其中共同的部分抽象出来
,如果有相同的业务需求,直接返回在内存中已经有的对象,避免重复创建
为了减少内存方面的需求
二.我们如何设计享元模式?
当我们需要设计享元模式的时候,需要在内存中和其中一个东西进行对应,唯一的id进行标示,例如我们在c++中通常可以使用一个hash_map来进行处理,不过同时提高了系统的复杂度,需要分离出来外部的状态和内部状态
使用场景
:大大减少了对象的创建,让效率进行提高
下面来举一个栗子
class Font{
private:
string key;
public:
Font (const string & key){
}
};
class FontFactroy{
private:
std::unordered_map<String,Font * > fontPool;
public:
Font * GetFont(const string & key) {
auto && it = fontPool.find(key);
if(it!=footPool.end()){
return fontPool[key];
}
else {
Font * font = new Font(key);
fontPool[key] = font;
return font;
}
类似于对象池的概念,数据结构可以使用不同,使用共享的方式,有则返回,没有则创建之后进行添加
运用共享技术来支持大量细粒度的对象
进行减少的消耗
三.什么时候使用享元
对于项目的创建进行评估
,使用这个对象最好是只读,不要经过修改