Java 牧场 代码
时间: 2024-06-22 12:03:33 浏览: 3
"Java 牧场"通常指的是Java中的经典设计模式之一,也称为"Feld莺"(Field Ibis)或"Observer Design Pattern"的示例。这个设计模式描述了观察者(Observer)如何订阅并接收主题(Subject)状态变化的通知。在Java中,这种模式常用于事件驱动编程场景,比如GUI应用程序中,当数据模型发生变化时,会通知所有绑定的视图更新。
以下是一个简单的Java牧场(Observer Pattern)实现:
```java
// 主题接口
interface Observable {
void register(Observer observer);
void unregister(Observer observer);
void notifyObservers();
}
// 观察者接口
interface Observer {
void update(String message);
}
// 具体主题(模拟奶牛农场)
class Farm implements Observable {
private List<Observer> observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void cowsMilked() {
notifyObservers("Cows have been milked.");
}
}
// 具体观察者(模拟挤奶工)
class Milkmaid implements Observer {
@Override
public void update(String message) {
System.out.println("Milkmaid received message: " + message);
}
}
public class Main {
public static void main(String[] args) {
Farm farm = new Farm();
Milkmaid milkmaid = new Milkmaid();
farm.addObserver(milkmaid); // 添加观察者
farm.cowsMilked(); // 主题状态改变,触发通知
farm.removeObserver(milkmaid); // 移除观察者
farm.cowsMilked(); // 再次通知,观察者不再接收
}
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)