package com.MrZhou.Obsever;
import java.util.ArrayList;
import java.util.List;
/*
* 什麼是觀察者模式?一般提到原告,必然腦子立刻聯想到被告,觀察者和被觀察者就如同原告和被告總是那麼成對出現。
* 觀察者模式,又被叫做訂閱模式,有訂閱者和發佈者。當下IPHONE6異常火爆,國內粉絲要想購買,那必須得預定,
* 必須到它蘋果官方去預定,填一大堆資料,交不交錢我不知道,反正得預定登記。等粉絲等到兩眼欲穿、花兒快謝了時候
* ,它粉墨登場了,官方以高姿態從容向預定過的粉絲髮售。這蘋果就是被觀察者,粉絲就是觀察者,
* 觀察者和被觀察者之間需要建立聯繫,那就是登記。登記過後,被觀察者拿捏火候覺得時機成熟的時候,
* 就以權位者姿態向觀察者拋出繡球,觀察者迫不及待的伸出雙手牢牢抓住後,滿心歡喜的讚美蘋果的偉大和自己的慶幸。
* 睜大眼睛盯着目標看,期待期望結果,這就是觀察者模式。
*
*/
public class Test {
public static void main(String[] args) {
American american = new American();
Apple apple = new Apple();
Chinese chinese = new Chinese();
System.out.println("IPhone現在開始預約了。。。。");
apple.countRegisterHumanNumber(chinese);
apple.countRegisterHumanNumber(american);
apple.offerIphone();
}
}
/*
* 觀察者
*/
class Apple {
List<Fensi> item = new ArrayList<>();
public void countRegisterHumanNumber(Fensi fans)
{
item.add(fans);
fans.register();
System.out.println("現在有"+item.size()+"個人預約了。。。小夥伴趕緊哦,很快就沒有了呢。。");
}
public void offerIphone()
{
System.out.println("IPhone發貨了。。。。。");
for(int i = 0;i < item.size();i++)
{
item.get(i).toCao();
}
}
}
class American implements Fensi {
@Override
public void register() {
System.out.println("我是美國人,嗯,它預熱的時候手機的功能很齊全,應該很好用吧。。。。。");
}
@Override
public void toCao() {
System.out.println("美國人 : 不會吧,卡了一B。。。。。。。又賣這麼貴。。。");
}
}
class Chinese implements Fensi {
// 很多中國人的盲目行爲
@Override
public void register() {
System.out.println("我是中國人,昨天不知道爲什麼就去預約登記買最新版的Iphone了,傻傻不知道爲什麼。。。");
}
// 拿到手後的吐槽
@Override
public void toCao() {
System.out.println("中國人 : 土豪金真好看,美觀,好喜歡啊。。。。。");
}
}
/*
* 預定登記 吐槽
*/
interface Fensi {
public void register();
public void toCao();
}
控制檯打印的結果:
IPhone現在開始預約了。。。。
我是中國人,昨天不知道爲什麼就去預約登記買最新版的Iphone了,傻傻不知道爲什麼。。。
現在有1個人預約了。。。小夥伴趕緊哦,很快就沒有了呢。。
我是美國人,嗯,它預熱的時候手機的功能很齊全,應該很好用吧。。。。。
現在有2個人預約了。。。小夥伴趕緊哦,很快就沒有了呢。。
IPhone發貨了。。。。。
中國人 : 土豪金真好看,美觀,好喜歡啊。。。。。
美國人 : 不會吧,卡了一B。。。。。。。又賣這麼貴。。。