观察者模式
来源:互联网 发布:苏州php培训 编辑:程序博客网 时间:2024/05/29 19:22
先介绍一下观察者模式,被观察者当然是要被观察者观察的,就比如C想知道B在干什么,但C又不想去监视B,于是就把B的监视工作交给了A,最终是A去监视B;(也就是A是观察者,B是被观察者),至于C,看看下面就知道了。
1)开始创建被观察者B,我这里用Observable代替了,java的util包里已经给我们提供了这个类,所以我们只要继承就好了。
public class Observable extends java.util.Observable { public void watchered1(){ Log.d("aaa","这是我被观察的方法一");2)创建被观察者A,这里我用MyObserver代替,需要实现Observer接口,重写update方法,里面的Observavle变量暂时不用,具体我没试过,不过应该就是那个被观察者对象。好了,我这里模拟A观察B,A再通知C,当update方法被调用的时候,其实就是B有动静,A观察到了,reportTOOther就相当于A通知C,//setChanged方法必须在notifyObservers之前调用,因为//notifyObservers方法会用到里面boolean值,只有为true的时候notifyObservers才有效super.setChanged();//顾名思义,当我调用这个方法是去通知所有观察我的观察者
super.notifyObservers("被观察者方法一");} public void watchered2(){ Log.d("aaa","这是我被观察的方法二"); super.setChanged(); super.notifyObservers("被观察者方法二"); }}
public class MyObserver implements java.util.Observer { @Override public void update(Observable o, Object arg) { Log.d("aaa","我观察到了,开始向别人汇报"); reportTOOther(arg.toString()); Log.d("aaa","汇报完毕!"); } private void reportTOOther(String s) { Log.d("aaa","收到观察者的信息:"+s); }}3)观察者,被观察者都创建完了,那么开始new 出对象,为被观察者添加观察者。当然,被观察者要有动静观察者才能收到消息。因为我这里使用的是as,用eclipse,所以这里的MainActivity中的onCreate方法就相当于java里的main方法,一个程序的入口...当然也不能全说是,反正没必要深究。
public class MainActivity extends AppCompatActivity { //先创建一个观察者,如果有更多也一样 Observer myObserver = new MyObserver(); //定义出被观察者 Observable observable = new Observable(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //我可以根据我定的,有一个观察者在观察一个被观察者 observable.addObserver(myObserver); //被观察者要干嘛当然还是要去干嘛的,这样观察者才能收到消息 observable.watchered1(); observable.watchered2(); }}
4)这样一个简单的观察者模式就创建完成了,接着看看运行结果。
1 0
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- 观察者模式
- HoloToolkit导入Error CS0227
- mnesia监控项目
- jquery 获取单选按钮的值
- JAVA-Spring学习之环境搭建
- 简单的for循环
- 观察者模式
- Ant path匹配规则
- Cocos2dx中英文混合字符串截取
- mqtt服务搭建
- provider: SQL Network Interfaces, error: 26 - 定位指定的服务器/实例时出错
- Linux下设置环境变量
- ubuntu下使用C++生成cifar10二进制格式的数据
- PHP开发web应用安全总结
- 对称加密与非对称加密