Obeverser观察者模式

模拟:小孩在睡觉,醒来后给小孩喂奶

方式一:父亲监控小孩,小孩一醒就喂奶

/**
 * 模拟小孩睡觉,醒来后喂奶
 *
 */

class Dad implements Runnable{
	private Child c;
	public Dad(Child c){
		this.c=c;
	}
	private void feed(){
		System.out.println("给小孩喂奶。。。");
	}

	@Override
	public void run()
	{
		while(!c.isWakeUp()){
			try
			{
				System.out.println("还没醒。。。");
				Thread.sleep(1000);
			} catch (InterruptedException e)
			{
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		feed();
	}
}
class Child implements Runnable{
	private boolean isWakeUp=false;
	 void wakeUp(){
		 isWakeUp=true;
		System.out.println("小孩醒来了。。。。。。");
	}
	 
	public boolean isWakeUp()
	{
		return isWakeUp;
	}

	public void setWakeUp(boolean isWakeUp)
	{
		this.isWakeUp = isWakeUp;
	}

	@Override
	public void run()
	{
		try
		{
			Thread.sleep(5000);
		} catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		wakeUp();
		
	}
}
public class Test
{
	public static void main(String[] args){
		Child c=new Child();
		new Thread(c).start();
		new Thread(new Dad(c)).start();
	}
}
方式二:小孩醒了,叫爸爸喂奶

class Dad {
	 void feed(){
		System.out.println("给小孩喂奶。。。");
	}
}
class Child implements Runnable{
	private Dad dad;
	public Child(Dad dad){
		this.dad=dad;
	}
	 void wakeUp(){
		System.out.println("小孩醒来了,喊爸爸喂奶。。。");
		dad.feed();
	}

	@Override
	public void run()
	{
		try
		{
			Thread.sleep(5000);
		} catch (InterruptedException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		wakeUp();
		
	}
}
public class Test
{
	public static void main(String[] args){
		Dad d=new Dad();
		new Thread(new Child(d)).start();
	}
}



Obeverser观察者模式

上一篇:水仙


下一篇:Linux bond模块学习笔记