阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。
【说明】
享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩家联机下棋。由于只有一台服务器,为节内存空间,采用享元模式实现该程序,得到如图6-1所的类图。

【Java代码】
import java.util.*:
enum PieceColor {
BLACK,
WHITE
} //棋子颜色
class PiecePos { //棋子位置
private int x;
private int y;
pubic 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);
}
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<>();
private String m_blackName; //黑方名称
private String m_whiteName; //白方名称
public PieceBoard(String black, String white) {
m_blackName = black;
m_whiteName = white;
}
//一步棋,在棋盘上放一颗棋子
public void SetePiece(PieceColor color, PiecePos pos) {
(3)piece = null;
if(color == PieceColor.BLACK) {//放黑子
piece = new BlackPiece(color, pos); //获取一颗黑子
System.out.println(m_blackName + "在位置(" +
pos.getX( ) + ", " + pos.getY( ) + ")");
(4);
} else{ //放白子
piece = new WhitePiece(color, pos); //获取一颗白子
System.out.println(m whiteName + "在位置(" + pos.getX() + ", " + pos.getY() + ")");
(5);
}
m_arrayPiece.add(piece);
}
}
参考答案:
(1)public abstract void draw()
(2)Piece
(3)Piece
(4)piece.draw()
(5)piece.draw()
答案解析:
对于第一空,可知该空需要填写的是Piece类里面的方法,对于其方法在图中都无法找出,可以根据其实现类(BlackPiece和WhitePiece类)来看,对应得是方法public void draw( ),又由于其在抽象类Piece里面,所以是抽象方法,需要加上关键词abstract,则为public abstract void draw( )
对于第二空,可知该空填写的是动态数组Arraylist的泛型,<>里面填写得应该是对应的m_arrayPiece的类型,用类进行修饰,可知其属于Piece类,填写的应该是Piece
对于第三空,可知该空填写的是对象创建的声明对象过程,格式应该为类名 对象名称=null,可知该对象piece对应的类是Piece(类名字母大写)
对于第四空和第五空,根据注释来看,是放黑子和白子的过程,已知实例化该对象piece,具体的放黑子和白子过程,都需要调用draw()方法来指向,故第4空和第5空填写的应该都是piece.draw()