猫叫老鼠跑-观察者模式
当一个对象的状态发生改变时,他的所有依赖者都会收到通知并自动更新---------观察者模式
即,猫A发出了叫声,老鼠B(老鼠C,D,E,F...)听到了这个声音,立即掉头就跑.
1 package ares.core; 2 3 import java.util.ArrayList; 4 5 public class Cat implements Subject { 6 private ArrayList<Observer> observers = new ArrayList<Observer>(); 7 private String name; 8 9 public Cat(String name) { 10 this.name = name; 11 } 12 13 public String getName() { 14 return this.name; 15 } 16 17 @Override 18 public void register(Observer o) { 19 observers.add(o); 20 } 21 22 @Override 23 public void remove(Observer o) { 24 if (observers != null && observers.size() > 0) { 25 int index = observers.indexOf(o); 26 if (index >= 0) { 27 observers.remove(index); 28 } 29 } 30 } 31 32 @Override 33 public void notifyObserver() { 34 for (Observer observer : observers) { 35 observer.listen(); 36 } 37 } 38 39 public void shout() { 40 System.out.println(this.name+":喵~喵~"); 41 notifyObserver(); 42 } 43 44 }
1 package ares.core; 2 3 public interface Subject { 4 public void register(Observer o); 5 6 public void remove(Observer o); 7 8 public void notifyObserver(); 9 }
1 package ares.core; 2 3 public class Mouse implements Observer { 4 private Cat cat; 5 private String name; 6 7 Mouse(String name, Cat cat) { 8 this.name = name; 9 this.cat = cat; 10 cat.register(this); 11 } 12 13 @Override 14 public void listen() { 15 System.out.println(this.name + "听见"+cat.getName()+"叫!"); 16 run(); 17 } 18 19 public void run() { 20 System.out.println(this.name + ":"+cat.getName()+"来了,兄弟们快跑"); 21 } 22 23 }
1 package ares.core; 2 3 public interface Observer { 4 public void listen(); 5 }
package ares.core; public class Main { public static void main(String[] args) { Cat cat = new Cat("大洋芋"); Mouse mouse=new Mouse("小米渣", cat); cat.shout(); } }