❶ java的回調函數和觀察者模式的區別
java的回調 叫listener 模式。
無論是listener模式,還是C++裡面的callback模式,本質是一樣的
他們都是觀察者模式的具體實現。
觀察者模式是設計模式中定義的一種思想,而具體到不同的語言環境,使用不同的語法表現出來就會有java的listener objc的 delegate,或者C++的 callback。
❷ JAVA觀察者模式(observer pattern)
StockData( extends Observable)只需要關注一個事件就好了。把多餘的代碼分割出來,封裝到一個event事件類里。只要有新事件就通知 Investor( implements Observer)觀察者有時間了。具體的時間有觀察者調用時間的方法來觸發。這樣代碼會整潔不少,邏輯也會很清晰、、
❸ javas設計模式 對象之間是一對一的關系(一方依賴另一方) 是應該採用state模式 還是observer模式
作為一個使用設計模式超過10年的前輩,我可以負責任地告訴你,你的問題問的有問題。是使用state模式還是observer模式,並不取決於對象之間是否存在一對一的關系。如果你還有疑問,我們可以再交流。
❹ Java JDK內置的Observer已丟棄,用什麼來代替
Java 9起淘汰了Observable及相關介面。
如果用Observable寫的對象事件訂閱機制,推薦用java.beans相關的類來代替。
如果用Observable寫的進程間通信機制,文檔推薦用java.util.concurrent並行庫相關的類來代替。
如果用Observable寫的反應式流水線機制,文檔推薦用並行庫的Flow及Future等類來代替。
如果僅僅是為了實現觀察者設計模式,可以寫自定義的類...或直接剪貼源碼
❺ Observer模式的實例
該實例模擬了燒水的過程,涉及三個對象,Heater(熱水器),Display(顯示器),Alarm(報警器).
模擬過程:為了便於運行,水的初始化溫度為90,沸點為95,顯示器依據熱水器顯示溫度,顯示器顯示溫度為95時,報警器開始報警。明顯可以看出Heater是subject ,Display 是它的 Obsrver,同時Display亦是subject,因為它要被報警器觀察,所以Alarm是Display的Observer.
實現過程:
a.Heater.java
Java代碼
import java.util.Observable;
public class Heater extends Observable {
private int temperature;
public int getTemperature() {
return temperature;
}
public void setTemperature(int temperature) {
this.temperature = temperature;
}
public void boilWater() {
for (int i = 90; i < 100; i++) {
temperature = i;
this.setChanged();
this.notifyObservers();
}
}
}
b.Display.java
Java代碼
import java.util.Observable;
import java.util.Observer;
public class Display extends Observable implements Observer {
private String status = 未開;
public void setStatus(String status) {
this.status = status;
}
public void displayTemputer(int temperature) {
if (temperature > 95) {
this.setStatus(沸騰);
this.setChanged();
this.notifyObservers();
}
System.out.println(狀態: + status + 現在溫度: + temperature + );
}
public void update(Observable o, Object arg) {
displayTemputer(((Heater) o).getTemperature());//這里不是很好
}
}
c.Alarm.java
Java代碼
import java.util.Observable;
import java.util.Observer;
public class Alarm implements Observer {
public void makeAlarm() {
System.out.println(嘀嘀嘀...水已經燒開 );
}
public void update(Observable o, Object arg) {
makeAlarm();
}
}
d.測試類testObserver.java
Java代碼
public class testObserver {
public static void main(String[] args) {
Heater heater = new Heater();
Display display = new Display();
Alarm alarm = new Alarm();
heater.addObserver(display);
display.addObserver(alarm);
heater.boilWater();
}
}
e.運行結果:
引用
狀態:未開 現在溫度:90
狀態:未開 現在溫度:91
狀態:未開 現在溫度:92
狀態:未開 現在溫度:93
狀態:未開 現在溫度:94
狀態:未開 現在溫度:95
嘀嘀嘀...水已經燒開
狀態:沸騰 現在溫度:96
嘀嘀嘀...水已經燒開
狀態:沸騰 現在溫度:97
嘀嘀嘀...水已經燒開
狀態:沸騰 現在溫度:98
嘀嘀嘀...水已經燒開
狀態:沸騰 現在溫度:99
❻ java繪圖ImageObserver observer,觀察者是什麼意思
public interface ImageObserver
用於在構造 Image 時,接收有關 Image 信息通知的非同步更新介面。
欄位摘要
static int ABORT
imageUpdate 的 infoflags 參數中的此標志指示被非同步跟蹤的圖像在生成完成前即已中止。
static int ALLBITS
imageUpdate 的 infoflags 參數中的此標志指示現在已完成了一幅以前繪制的靜態圖像,並且可以其最終形式再次繪制它。
static int ERROR
imageUpdate 的 infoflags 參數中的此標志指示被非同步跟蹤的圖像遇到了錯誤。
static int FRAMEBITS
imageUpdate 的 infoflags 參數中的此標志指示多幀圖像(以前繪制的)的另一個完整幀現在可以再次繪制。
static int HEIGHT
imageUpdate 的 infoflags 參數中的此標志指示基本圖像的高度現在可用,並且可從 height 參數中獲取此高度到 imageUpdate 回調方法。
static int PROPERTIES
imageUpdate 的 infoflags 參數中的此標志指示該圖像的屬性現在可用。
static int SOMEBITS
imageUpdate 的 infoflags 參數中的此標志指示已提供了繪制圖像縮放變體所需的更多像素。
static int WIDTH
imageUpdate 的 infoflags 參數中的此標志指示基本圖像的寬度現在可用,並且可從 width 參數中獲取此寬度到 imageUpdate 回調方法。
❼ implements Observer java中什麼意思
observer 是一種設計模式
implements Observer java:用java實現observer這種設計模式
具體的實現方法你可以從「Gang of Four」編寫的《設計模式》這本書中找到答案