我英语不好 现来点英语提提脑子:
观察者:Odserver
被观察者:ToOdserver
发送消息:SendMessage
接受消息:ReceMessage
什么是观察者模式?
举个例子
加入我是某某某 演讲者 ,我在台上演讲,下面有很多观众看着我,那么我是被观察者,观众是观察者,
因为这是我的私人演讲,所以我有权利让指定的人来看 【发门票】 所以我演讲的时候要发送信息,观众接受信息:
那么我们分析好了:
----------------------------------------------------------------
观察者: 接受信息【收到指定信息作出不用操作】
被观察者: 发送信息 添加 和 删除 观察者
-------------------------------------------------------------------
这是最基本的最简单的一种例子了:
首先我们建立接口两个 观察者接口 和 被观察者接口
然后 分别去实现类他们【重写他们】
具体逻辑看代码:很简单的一个模式:也很实用:
1. 这是工程目录:
2. 观察者接口 和 被观察者接口:
package com.Observser; //观察者接口 public interface Observer { public void ReceMessage(String message); } ---------------------------------------------------------------- 两个代码啊 我这里为了压缩空间---------------------- package com.Observser; /*** * 被观察者接口 * @author Bi-Hu * */ public interface ToObservser { public void AddObserver(Observer observser); //添加观察者 public void RemoOvserver(Observer observser); //删除观察者 public void SendMessage(String Message); //发送信息给观察者 }
3.实现他们: 这里设定了 A 和 B 类作为观察者 my 是 被观察者 意思就是 a和b 在观察我:
具体 a 和 b 实现观察者接口 my 实现被观察者接口
package com.Observser.impl; import com.Observser.Observer; public class A implements Observer{ @Override public void ReceMessage(String message) { if(message.equals("大家好!我是BiHu")) { System.out.println("a : 是Bi-Hu ! Bi - Hu! Bi - Hu! "); } } }
package com.Observser.impl; import com.Observser.Observer; public class B implements Observer{ @Override public void ReceMessage(String message) { if(message.equals("大家好!我是BiHu")) { System.out.println("b : 是Bi-Hu ! Bi - Hu! Bi - Hu! "); } } }
-------------------------------------A 、B 两个观察者
被观察者:My:
package com.Observser.impl; import java.util.*; import com.Observser.Observer; import com.Observser.ToObservser; public class my implements ToObservser{ private List<Observer> bihu = new ArrayList<Observer>(); @Override public void AddObserver(Observer observser) { // TODO Auto-generated method stub bihu.add(observser); } @Override public void RemoOvserver(Observer observser) { // TODO Auto-generated method stub bihu.remove(observser); } @Override public void SendMessage(String Message) { // TODO Auto-generated method stub //这里是发送消息通知所有的人【观众】 for(Observer guanzhong : bihu) { guanzhong.ReceMessage(Message); //观众接受信息 } } }
最后测试类:
import com.Observser.impl.A; import com.Observser.impl.B; import com.Observser.impl.my; public class Test { public static void main(String[] args) { //测试类 //两个观众a 和 b 这两个人在闲聊,知道了大明星要来 A a = new A(); B b = new B(); //首先我们bihu大明星登场: my bihu = new my(); //然后我们添加观众【发门票啦!】 bihu.AddObserver(a); bihu.AddObserver(b); //然后开始演讲 bihu.SendMessage("大家好!我是BiHu"); //最后a 和 b做出动作即可:【看输出】 } }
原理就很简单: 我一出场 说了句 大家好!我是BiHu 观察者都很活跃的说:xxxx 当然 观察者要干什么是你自己定义的 你完全可以不欢呼或者不执行任何动作。
原理就是: 被观察者一旦改变 观察者就跟着改变 具体这个 “改变” 完全是你自定义的事件。
原文:https://www.cnblogs.com/bi-hu/p/14854267.html