1.8 觀察者模式-Observer(重要)
定義觀察者介面,可以有多個觀察者實現該介面。觀察者經常和責任鏈一起使用,觀察者可以當做責任鏈的一環。
- 一般事件都是使用的觀察者模式,比如鍵盤事件,滑鼠事件等
- 事件源物件,觀察者
1.8.1 Spring的AOP
- Spring的Aop就可以當成一個觀察者模式的實現,一直在觀察這個切面
1.8.2 鍵盤監聽器
- 很多事件也是使用的觀察者模式,例如鍵盤監聽器,監聽鍵盤事件
- 總結:Observer 或 Listenner 或 Hook 或 Callback這種實質上都是屬於觀察者模式
1.9 組合模式 - Composite
- 常用作組織結構,組織樹,樹狀結構
- 比如根目錄下有幾個一級子目錄,子目錄下又有子目錄,做的事情不同
1.10 享元模式-Flyweight
重複利用物件,常用在輸入工具,例如word中,比如你鍵盤敲擊一個字母A。那麼如果沒有享元會怎麼樣呢,每敲擊一次,就會有一個A物件產生。享元模式事先把A~Z都存下來,放到一個池子中。當做共享的後設資料
1.10.1 連線池,執行緒池:Pool
連線池,執行緒池,都是用的享元模式
1.10.2 Java中的String
Java中的字串,都放在字串常量池裡面
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
// true
System.out.println(s1 == s2);
// false
System.out.println(s1 == s3);
// false
System.out.println(s3 == s4);
// true
System.out.println(s3.intern == s1);
// true
System.out.println(s.intern == s4.intern);
}
解釋:
s1 == s2是因為字串常量池已經有"abc",用的是同一個
s3 == s4是因為new操作重新分配了記憶體,記憶體地址不同,所以false
s3.intern == s1是因為s3.intern表示的是s3對應的常量池引用,因為雖然s3開闢了記憶體,但是指向的常量也會從常量池裡面拿,不會新建立"abc""
1.10.3 結合組合模式的享元模式
享元的元物件,可以組合成另外的元物件,所以可以和組合結合起來