猫叫-》老鼠跑和人醒
思路:
设计两个接口:观察者Observer(response函数)和通知者Subject(加入通知者队列的函数add)
猫实现了通知者的接口:构造函数中主要就是new arraylist,add函数(add.(o)),再写一个cry函数 主要就是调用每个观察者的response函数
达到一个全部通知的作用。
老鼠和人都实现了观察者接口:构造函数就是new的时候把自己加入队列,调用通知者的add函数,具体化每个的response响应函数。
main中直接new每个对象。然后发出cry的命令。即可达到全部通知到,并且做出响应的效果。
import java.util.ArrayList;
public class Observer_Subject {
/**
* @param args 观察者模式
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat=new Cat();
Mouse mouse=new Mouse(cat);
People people=new People(cat);
cat.cry();
}
}
//通知者
interface Subject{
void AddObserver(Observer obj);
}
//猫实现了通知者的接口
class Cat implements Subject{
ArrayList<Observer> arrayList;
public Cat() {
arrayList=new ArrayList<Observer>();
}
@Override
public void AddObserver(Observer obj) {
// TODO Auto-generated method stub
arrayList.add(obj);
}
void cry(){//猫叫,通知所有的观察者
for (Observer obj:arrayList) {
obj.responer();
}
}
}
//观察者
interface Observer{
void responer();
}
class Mouse implements Observer{
public Mouse(Cat c) {//将当前的观察者加入到集合中
c.AddObserver(this);
}
@Override
public void responer() {
// TODO Auto-generated method stub
System.out.println("老鼠跑");
}
}
class People implements Observer{
public People(Cat c) {
c.AddObserver(this);
}
@Override
public void responer() {
// TODO Auto-generated method stub
System.out.println("人醒了");
}
}