觀察者模式定義:對象之間多對一依賴的一種設計方案,被依賴的對象爲Subject,依賴的對象爲Observer,Subject通知Oberver變化。
觀察者模式就像小時候的訂牛奶業務
-
奶站:相當於Subject,負責訂奶家庭的登記,派送,退訂工作
-
用戶:相當於Oberver,訂奶家庭
Subject:負責用戶的登記註冊,移除和通知
Oberver:負責接收Subject的通知輸入
代碼案例:
1
2
3
4
5
6
|
//觀察者 public interface Observer
{ public void update(); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class MilkFamily implements Observer
{ private String
familyName; public MilkFamily(String
familyName) { this .familyName
= familyName; } @Override public void update()
{ System.out.println(familyName+ "--------收到牛奶" ); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
//被觀察者 public abstract class Observable
{ protected List<Observer>
observerList = new ArrayList<Observer>(); //添加觀察者 public void addObserver(Observer
observer){ observerList.add(observer); } //移除觀察者 public void deleteObserver(Observer
observer){ observerList.remove(observer); } //通知所有觀察者 public void notifyObservers(){ for (Observer
o : observerList){ o.update(); } } } |
1
2
3
4
5
6
7
8
|
public class MileStation extends Observable
{ public void deliver(){ System.out.println( "新的一天到了,牛奶站準備送牛奶了。。。。。。" ); super .notifyObservers(); } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
public class Main
{ public static void main(String
args[]){ MileStation
mileStation = new MileStation(); MilkFamily
milkFamily = new MilkFamily( "小小巫的家" ); MilkFamily
milkFamily2 = new MilkFamily( "巫巫巫的家" ); mileStation.addObserver(milkFamily); mileStation.addObserver(milkFamily2); mileStation.deliver(); } } |