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。。。。。。。又卖这么贵。。。