观察者模式
# 观察者模式 #
----------
什么是观察者模式?一般提到原告,必然脑子立刻联想到被告,观察者和被观察者就如同原告和被告总是那么成对出现。观察者模式,又被叫做订阅模式,有订阅者和发布者。当下IPHONE6异常火爆,国内粉丝要想购买,那必须得预定,必须到它苹果官方去预定,填一大堆资料,交不交钱我不知道,反正得预定登记。等粉丝等到两眼欲穿、花儿快谢了时候,它粉墨登场了,官方以高姿态从容向预定过的粉丝发售。这苹果就是被观察者,粉丝就是观察者,观察者和被观察者之间需要建立联系,那就是登记。登记过后,被观察者拿捏火候觉得时机成熟的时候,就以权位者姿态向观察者抛出绣球,观察者迫不及待的伸出双手牢牢抓住后,满心欢喜的赞美苹果的伟大和自己的庆幸。睁大眼睛盯着目标看,期待期望结果,这就是观察者模式。
来段代码体验一把
----------
import java.util.ArrayList;
import java.util.List;
public class MyOberver {
public static void main(String[] args) {
American american=new American();
Chinese chinese=new Chinese();
Iphone iphone=new Iphone();
System.out.println("一个美国人登记购买");
iphone.register(american);
System.out.println("一个中国人登记购买");
iphone.register(chinese);
try {
System.out.println("经过6个月的漫长等待...");
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
iphone.notifys();
}
}
/**观察者*/
class Iphone{
private List<Fensi> list=new ArrayList<Fensi>();
public void register(Fensi n){
list.add(n);
System.out.println("又一个苹果被预订了,现在总共有:"+list.size()+"个人预订了...");
}
public void notifys(){
System.out.println("IPHONE 6现在高调发售...");
for (Fensi n:list) {
n.receive();
}
}
}
class American implements Fensi{
@Override
public void receive() {
// TODO Auto-generated method stub
System.out.println("美国人喊叫:嗯哼,有点贵....");
}
}
class Chinese implements Fensi{
@Override
public void receive() {
// TODO Auto-generated method stub
System.out.println("中国人:我终于买到了,高兴死了....");
}
}
interface Fensi{
public void receive();
}
----------
运行后输出结果:
一个美国人登记购买
又一个苹果被预订了,现在总共有:1个人预订了...
一个中国人登记购买
又一个苹果被预订了,现在总共有:2个人预订了...
经过6个月的漫长等待...
IPHONE 6现在高调发售...
美国人喊叫:嗯哼,有点贵....
中国人:我终于买到了,高兴死了....
这就是观察者模式,Chinese和American都是观察者,它们继承了Fensi接口,具有了接收消息receive的能力,Iphone是被观察者,是被观察的目标,它的一举一动,都会深深的影响Fensi们的热情,观察者需要在被观察者哪里进行登记购买register,登记过后,等到时机成熟了,被观察者会主动放出信号iphone.notifys();这样,凡是登记过购买苹果6的粉丝们,都会纷纷收到取货的信息了。
----------
评论