📅  最后修改于: 2023-12-03 15:42:18.755000             🧑  作者: Mango
这个问题涉及到设计模式中的观察者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象,当主题对象状态发生改变时,它的所有观察者都会收到通知并更新。
在本题中,我们需要实现一个观察者模式来模拟球赛成绩的展示。
我们需要有一个主题对象 Score
,用来存储球赛的成绩,并提供更新成绩的接口。
class Score {
private int homeScore;
private int awayScore;
private List<Observer> observers;
public Score() {
observers = new ArrayList<>();
}
public void addObserver(Observer observer) {
observers.add(observer);
}
public void updateScore(int homeScore, int awayScore) {
this.homeScore = homeScore;
this.awayScore = awayScore;
notifyObservers();
}
private void notifyObservers() {
observers.forEach(observer -> observer.update(homeScore, awayScore));
}
}
我们还需要有一个观察者接口 Observer
,定义了一个更新方法 update
,它会在主题对象的成绩发生改变时被调用。
interface Observer {
void update(int homeScore, int awayScore);
}
我们需要实现两个观察者 ScoreDisplay
和 ScoreBoard
来展示球赛成绩。ScoreDisplay
会显示当前比分,ScoreBoard
会显示完整的比赛情况。
class ScoreDisplay implements Observer {
@Override
public void update(int homeScore, int awayScore) {
System.out.println("Current Score - Home: " + homeScore + " Away: " + awayScore);
}
}
class ScoreBoard implements Observer {
private int homeScore;
private int awayScore;
@Override
public void update(int homeScore, int awayScore) {
this.homeScore = homeScore;
this.awayScore = awayScore;
displayScoreBoard();
}
private void displayScoreBoard() {
System.out.println("Score Board - Home: " + homeScore + " Away: " + awayScore);
}
}
我们可以在主方法中创建一个主题对象 Score
和两个观察者 ScoreDisplay
和 ScoreBoard
,并将它们注册到主题对象中。然后,我们可以调用主题对象提供的更新成绩的接口,来模拟球赛成绩的变化。
public static void main(String[] args) {
Score score = new Score();
Observer scoreDisplay = new ScoreDisplay();
Observer scoreBoard = new ScoreBoard();
score.addObserver(scoreDisplay);
score.addObserver(scoreBoard);
// Simulate score change
score.updateScore(1, 0);
score.updateScore(1, 1);
score.updateScore(2, 1);
}
输出结果如下:
Current Score - Home: 1 Away: 0
Score Board - Home: 1 Away: 0
Current Score - Home: 1 Away: 1
Score Board - Home: 1 Away: 1
Current Score - Home: 2 Away: 1
Score Board - Home: 2 Away: 1
以上就是观察者模式的一个实现,它可以用于实时展示球赛成绩或其他任何需要及时更新的情景。