• 2021年下半年软件设计师下午真题答案及解析(五)


    阅读下列说明和Java代码,将应填入(n)处的字句写在题纸的对应栏内。
    【说明】
    享元(flyweight)模式主要用于减少创建对象的数量,以低内存占用,提高性能。现要开发一个网络围棋程序允许多个玩家联机下棋。由于只有一台服务器,为节内存空间,采用享元模式实现该程序,得到如图6-1所的类图。
    图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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    参考答案:
    (1)public abstract void draw()
    (2)Piece
    (3)Piece
    (4)piece.draw()
    (5)piece.draw()

    答案解析:

    对于第一空,可知该空需要填写的是Piece类里面的方法,对于其方法在图中都无法找出,可以根据其实现类(BlackPieceWhitePiece类)来看,对应得是方法public void draw( ),又由于其在抽象类Piece里面,所以是抽象方法,需要加上关键词abstract,则为public abstract void draw( )

    对于第二空,可知该空填写的是动态数组Arraylist的泛型,<>里面填写得应该是对应的m_arrayPiece的类型,用类进行修饰,可知其属于Piece类,填写的应该是Piece

    对于第三空,可知该空填写的是对象创建的声明对象过程,格式应该为类名 对象名称=null,可知该对象piece对应的类是Piece(类名字母大写)

    对于第四空和第五空,根据注释来看,是放黑子和白子的过程,已知实例化该对象piece,具体的放黑子和白子过程,都需要调用draw()方法来指向,故第4空和第5空填写的应该都是piece.draw()

  • 相关阅读:
    vue3中 | 使用Pinia 进行状态管理 | pinia优化重复请求
    配置Jetson扩展头--配置CSI相机
    三、Selenium IDE
    viper读取配置文件
    【农业生产模拟】WOFOST模型与PCSE模型实践
    UE4 通过互动(键盘按键)开门
    linux系统备份及还原
    8.11 可解析AI
    教师资格证面试建议
    MSP430F5529库函数定时器A——捕获实验
  • 原文地址:https://blog.csdn.net/johnWcheung/article/details/126412943