• 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

  • 相关阅读:
    绘图类
    画笔类
    创建模态,非模态对话框
    菜单类
    [WPF]程序随系统自启动
    [WPF]xml序列化以及反序列化数据
    [WPF]项目整合Metro和MaterialDesignInXamlToolkit UI框架
    [WPF]鼠标移动到Button颜色改变效果设置
    [Leetcode] 寻找数组的中心索引
    [Leetcode]在排序数组中查找元素的第一个和最后一个位置
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14854267.html
Copyright © 2020-2023  润新知