Java 观察者模式 -- JavaSe | JSP

我英语不好 现来点英语提提脑子:

观察者: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

原文地址:https://www.cnblogs.com/bi-hu/p/14854267.html