設計模式 享元模式

2021-10-03 12:35:17 字數 1650 閱讀 9000

享元模式結構圖

意圖:運用共享技術有效地支援大量細粒度的物件。

主要解決:在有大量物件時,有可能會造成記憶體溢位,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接返回在記憶體中已有的物件,避免重新建立。

其中:

應用舉例

例如我們下五子棋,對於棋子來說,我們不用放乙個棋子就new乙個棋子物件,只有在需要的時候,去請求獲得對應的棋子物件,如果沒有,就new乙個棋子物件;如果有了,就直接返回棋子物件。當玩家在棋盤上放入第乙個白色棋子時,此時由於沒有白色棋子,所以就new乙個白色棋子;當另乙個玩家放入第乙個黑色棋子時,此時由於沒有黑色棋子,所以就需要new乙個黑色棋子;當玩家再次放入乙個白色棋子時,就去查詢是否有已經存在的白色棋子物件,由於第一次已經new了乙個白色棋子物件,所以,現在不會再次new乙個白色棋子物件,而是返回以前new的白色棋子物件;對於黑色棋子,亦是同理;獲得了棋子物件,我們只需要設定棋子的不同棋盤位置即可。 

#include #include #include using namespace std;

//棋子顏色

enum piececolor ;

//棋子位置

struct piecepos

};//棋子定義

class piece

~piece() {}

virtual void draw() {}

};class blackpiece : public piece

~blackpiece() {}

void draw()

};class whitepiece : public piece

~whitepiece() {}

void draw()

};//棋盤

class pieceboard

~pieceboard()

void setpiece(piececolor color, piecepos pos)

cout << m_blackname << "在位置(" << pos.x << ',' << pos.y << ")";

m_blackpiece->draw();

} else

cout << m_whitename << "在位置(" << pos.x << ',' << pos.y << ")";

m_whitepiece->draw();

} m_vecpos.push_back(pos);

}private:

vectorm_vecpos; //存放棋子的位置

piece *m_blackpiece = nullptr; //黑棋棋子

piece *m_whitepiece = nullptr; //白棋棋子

string m_blackname;

string m_whitename;

};int main()

適用性

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...

設計模式 享元模式

享元模式flyweight flyweight 模式是乙個提高程式效率和效能的模式 會大大加快程式的執行速度。把物件中使用比較多,具有共同點的,拿出來做成乙個共享類,這樣就行成了共享模式。如 integer 物件在 128 127 使用的是同乙個物件。在這之間是共享的。享元中的角色 flyweigh...

設計模式 享元模式

舉個圍棋的例子,圍棋的棋盤共有361格,即可放361個棋子。現在要實現乙個圍棋程式,該怎麼辦呢?首先要考慮的是棋子棋盤的實現,可以定義乙個棋子的類,成員變數包括棋子的顏色 形狀 位置等資訊,另外再定義乙個棋盤的類,成員變數中有個容器,用於存放棋子的物件。下面給出 表示 棋子的定義,當然棋子的屬性除了...