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