医疗网站前置审批取消,网页美工设计报价单,上海网站建设口碑好,广州市做民宿什么网站比较好目录
1. 享元模式简介
2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象#xff0c;降低内存消耗。共享对象相同的部分#xff0c;避免创建大量相同的对象#xff0c;减少内存占用。
享元模式需要将对象分成内部状态和外部状态两个部分…目录
1. 享元模式简介
2. 代码示例 1. 享元模式简介 享元模式是一种结构型模式。 享元模式用于缓存共享对象降低内存消耗。共享对象相同的部分避免创建大量相同的对象减少内存占用。
享元模式需要将对象分成内部状态和外部状态两个部分。
所谓内部状态指的是可以共享的状态外部状态指的是会随着对象的使用而改变的的状态。
比如如果要模拟一个五子棋程序。对棋子来说棋子的图片就属于内部状态而棋子的位置和大小就属于外部状态。棋子的图片可以被所有使用棋子的地方所共享棋子的位置和大小每个使用的地方都不一样。 享元模式通常要搭配简单工厂模式一起使用在简单工厂内使用一个享元对象的缓存池缓存享元对象。 2. 代码示例 就以棋子模拟程序作为示例代码如下所示
#if 1#include iostream
#include map
#include memory
#include stringusing namespace std;enum ChessPieceType { White, Black };class ChessPiece {
public:virtual void Draw(int x, int y) 0;virtual ~ChessPiece() {}
};class WhiteChessPiece : public ChessPiece
{
public:void Draw(int x, int y) override{cout 在( x , y ) 位置放置白棋子 endl;}
};class BlackChessPiece : public ChessPiece
{
public:void Draw(int x, int y) override{cout 在( x , y ) 位置放置黑棋子 endl;}
};class ChessFactory
{
public:static shared_ptrChessPiece CreateChessPiece(ChessPieceType type){if (chessPieces.find(type) chessPieces.end()){if (type White){chessPieces[type] make_sharedWhiteChessPiece();}else if (type Black){chessPieces[type] make_sharedBlackChessPiece();}}return chessPieces[type];}
private:static mapChessPieceType, shared_ptrChessPiece chessPieces;
};mapChessPieceType, shared_ptrChessPiece ChessFactory::chessPieces;int main()
{auto piece1 ChessFactory::CreateChessPiece(ChessPieceType::White);piece1-Draw(1, 2);auto piece2 ChessFactory::CreateChessPiece(ChessPieceType::Black);piece2-Draw(3, 4);auto piece3 ChessFactory::CreateChessPiece(ChessPieceType::White);piece3-Draw(5, 6);return 0;
}#endif
运行截图如下