2021下半年案例6
阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。
【说明】享元(flyweight)模式主要用于减少创建对象的数量,以降低内存占用,提高性能。现要开发一个网络围棋程序,允许多个玩家联机下棋。由于只有一台服务器,为节省内存空间,采用享元模式实现该程序,得到如图6-1所示的类图。
import java.util.*;
//棋子颜色
//Java 枚举是一个特殊的类,一般表示一组常量
enum PieceColor { BLACK, WHITE}
//棋子位置
class PiecePos{
private int x;
private int y;
public PiecePos(int a, int b){x = a; y = b;}
public int getX() { return x; }
public int getY() { return y; }
}
//棋子定义
abstract class Piece {
//颜色
protected PieceColor m_color;
//位置
protected Piecemopos m_pos;
public Piece(PieceColor color, PiecePos pos) {m_color=color, m_pos=pos;}
//(1);
public abstract void draw();
}
class BlackPiece extends Piece {
public BlackPiece(PieceColor color, PiecePos pos){ super(color,pos);}
public void draw(){
System.out.println("draw a black piece");
}
}
class WhitePiece extends Piece {
public WhitePiece(PieceColor color, PiecePos pos) { super(color, pos); }
public void draw(){
System.out.println("draw a white piece");
}
}
//棋盘上已有的棋子
class PieceBoard{
//private static final ArrayList<(2)>m_arrayPiece = new ArrayList
//ArrayList棋盘
private static final ArrayList<Piece>m_arrayPiece = new ArrayList<>();
//黑方名称
private String m_blackName;
//白方名称
private String m_whiteName;
public PieceBoard(String black, String white) {
m_blackName = black;
m_whiteName = white;
}
//一步棋,在棋盘上放一颗棋子
public void SetPiece(PieceColor color, PiecePos pos) {
//(3)piece = null;
Piece piece = null;
//放黑子
if(color ==PieceColor.BLACK) {
//获取一颗黑子
piece=new BlackPiece(color, pos);
System.out.println(m_blackName+"在位置("+pos.getX()+","+pos.getY()+ ")");
//(4);
piece.draw();
}else{//放白子
piece=new WhitePiece(color,pos);
//获取一颗白子
System.out.println(m_whiteName+"在位置("+pos.getX()+","+pos.getY()+")");
//(5);
piece.draw();
}
m_arrayPiece.add(piece);
}
}
分析