猫叫老鼠跑-观察者模式
2015-12-15 02:24
183 查看
当一个对象的状态发生改变时,他的所有依赖者都会收到通知并自动更新---------观察者模式
即,猫A发出了叫声,老鼠B(老鼠C,D,E,F...)听到了这个声音,立即掉头就跑.
即,猫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(); } }
相关文章推荐
- Leetcode: Remove Linked List Elements
- 一颗小白菜的编程之旅起点
- setProjectionMap@SQLiteQueryBuilder使用简记
- 多态性(C#)
- Leetcode: Bitwise AND of Numbers Range
- background复合属性详解(上):background-image
- Maven编译32位Hadoop2.7.1
- awk 正则表达式、正则运算符详细介绍
- HDU 3016 线段树单点更新+DP
- 296. Best Meeting Point
- ORACLE LINUX 5.11 UDEV绑定asm磁盘问题
- UVALive 6905 Two Yachts(费用流)
- awk单行脚本快速参考
- UVALive 6904 Travel Card(dp)
- glsl计算sprite的亮度饱和度对比度
- mysql =》 mysql 命令恢复数据库
- 高精度数字
- UVALive 6902 Three Squares(二分 + 搜索)
- runtime——函数替换
- [蓝牙] 5、Battery Service module