您的位置:首页 > 其它

猫叫老鼠跑-观察者模式

2015-12-15 02:24 183 查看
  当一个对象的状态发生改变时,他的所有依赖者都会收到通知并自动更新---------观察者模式

  即,猫A发出了叫声,老鼠B(老鼠C,D,E,F...)听到了这个声音,立即掉头就跑.

package ares.core;

import java.util.ArrayList;

public class Cat implements Subject {
private ArrayList<Observer> observers = new ArrayList<Observer>();
private String name;

public Cat(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

@Override
public void register(Observer o) {
observers.add(o);
}

@Override
public void remove(Observer o) {
if (observers != null && observers.size() > 0) {
int index = observers.indexOf(o);
if (index >= 0) {
observers.remove(index);
}
}
}

@Override
public void notifyObserver() {
for (Observer observer : observers) {
observer.listen();
}
}

public void shout() {
System.out.println(this.name+":喵~喵~");
notifyObserver();
}

}


package ares.core;

public interface Subject {
public void register(Observer o);

public void remove(Observer o);

public void notifyObserver();
}


package ares.core;

public class Mouse implements Observer {
private Cat cat;
private String name;

Mouse(String name, Cat cat) {
this.name = name;
this.cat = cat;
cat.register(this);
}

@Override
public void listen() {
System.out.println(this.name + "听见"+cat.getName()+"叫!");
run();
}

public void run() {
System.out.println(this.name + ":"+cat.getName()+"来了,兄弟们快跑");
}

}


package ares.core;

public interface Observer {
public void listen();
}


package ares.core;

public class Main {

public static void main(String[] args) {
Cat cat = new Cat("大洋芋");
Mouse mouse=new Mouse("小米渣", cat);
cat.shout();
}

}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: