例子-合格
2026/10/8大约 4 分钟
例子-合格
1. 题目一
interface Observer { public void update(float temp, float humidity, float cleanness); } interface Subject { public void registerObserver(Observer o); //注册对主题感兴趣的观察者 public void removeObserver(Observer o); //删除观察者 public void notifyObservers(); //当主题发生变化时通知观察者 } class EnvironmentData implements (1) { //子类实现父接口 private ArrayList observers; private float temperature, humidity, cleanness; public EnvironmentData() { observers = new ArrayList(); } public void registerObserver(Observer o) { observers.add(o); } public void removeObserver(Observer o) { /* 代码省略 */ } } public void notifyObservers() { for (int i = 0; i < observers.size(); i++) { Observer observer = (Observer) observers.get(i); (2) ; // } } public void measurementsChanged() { //测量发生变化 (3) ; // } public void setMeasurements(float temperature, float humidity, float cleanness) { this.temperature = temperature; this.humidity = humidity; this.cleanness = cleanness; (4) ; //设置最新数据,测量值发生变化。 } class CurrentConditionsDisplay implements (5) { private float temperature; private float humidity; private float cleanness; private Subject envData; public CurrentConditionsDisplay(Subject envData) { this.envData = envData; (6) ; //把当前观察者放在主体中。 } public void update(float temperature, float humidity, float cleanness) { this.temperature = temperature; this.humidity = humidity; this.cleanness = cleanness; display(); //更新的时候,把数据展示出来。 } public void display() { /* 代码省略 */ } }
1.1 正确答案
(1) Subject
(2) observer.update(temperature, humidity, cleanness)
- 在
notifyObservers() 方法中,遍历所有观察者,调用每个观察者的 update 方法,并将最新的环境数据传递给它。
(3) notifyObservers()
measurementsChanged() 表示测量发生变化,此时应通知所有观察者,调用 notifyObservers()。
(4) measurementsChanged()
setMeasurements() 设置最新数据后,测量值发生变化,应调用 measurementsChanged() 来触发通知。
(5) Observer
CurrentConditionsDisplay 作为具体观察者,需要实现 Observer 接口,并实现其中的 update 方法。
(6) envData.registerObserver(this)
- 在构造方法中,需要把当前观察者对象注册到主题(
Subject)中,即调用主题的 registerObserver 方法,传入 this。
2. 题目二
阅读下列说明和 JAVA 代码,将应填入空 (n) 处的字句写在答题纸的对应栏内。
【说明】
欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。
以绘制直线和圆形为例,对应的绘图程序如表 6-1 所示。
表 6-1 不同的绘图程序
DP1 DP2 绘制直线 draw_a_line(x1, y1, x2, y2) drawline(x1, y1, x2, y2)绘制圆 draw_a_circle(x, y, r) drawcircle(x, y, r)
(1) Drawing { (2) ; (3) ; } class DP1 { static public void draw_a_line(double x1, double y1, double x2, double y2) { /*代码省略*/ } static public void draw_a_circle(double x, double y, double r) { /*代码省略*/ } } class DP2 { static public void drawline(double x1, double y1, double x2, double y2) { /*代码省略*/ } static public void drawcircle(double x, double y, double r) { /*代码省略*/ } } class V1Drawing implements Drawing { public void drawLine(double x1, double y1, double x2, double y2) { /*代码省略*/ } public void drawCircle(double x, double y, double r) { (4) ; } } class V2Drawing implements Drawing { public void drawLine(double x1, double y1, double x2, double y2) { /*代码省略*/ } public void drawCircle(double x, double y, double r) { (5) ; } } abstract class Shape { private Drawing _dp; (6) ; Shape(Drawing dp) { _dp = dp; } public void drawLine(double x1, double y1, double x2, double y2) { _dp.drawLine(x1, y1, x2, y2); } public void drawCircle(double x, double y, double r) { _dp.drawCircle(x, y, r); } }
2.1 正确答案
(1) public interface 或 interface
(2) public void drawLine(double x1, double y1, double x2, double y2)
或 void drawLine(double x1, double y1, double x2, double y2)
(3) public void drawCircle(double x, double y, double r)
或 void drawCircle(double x, double y, double r)
(4) DP1.draw_a_circle(x, y, r)
(5) DP2.drawcircle(x, y, r)
(6) abstract public void draw()
或 public abstract void draw()


