享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图5-1所示的类图。
C++代码
#include <iostream>
#include <vector>
using namespace std;
enum PieceColor{BLACK, WHITE}; //棋子颜色
class PiecePos{ //棋子位置
private:
int x;
int y;
public:
PiecePos(int a,int b); x(a),y(b){}
int getX(){return x;}
int getY(){return y;}
};
class Piece{ //棋子定义
piece=new BlackPiece(color,pos); //获取一颗黑子
count<<m_blackName <<"在位置(" <<pos.getX() <<","<<pos.getY()<< ")";
( 4 );
}else{ //放白子
piece=new WhitePiece(color,pos); //获取一颗白子
count<<m_whiteName <<"在位置(" <<pos.getX() <<","<<pos.getY()<< ")";
( 5 );
}
m_vecPiece.push_back(piece);
}
};
(1) virtual void DrawO {}
(2) Piece*
(3) Piece *
(4) piece->Draw0
(5) piece->Draw0