• java实现23种设计模式之观察者模式


    先建立一个接口和两个实现类

    package com.ceshi14;
    
    public interface Observer {
        public void update();
    }
    package com.ceshi14;
    
    public class Observer1 implements Observer {
    
        @Override
        public void update() {
            System.out.println("观察者1已接收");
        }
    
    }

    再新建一个接口:

    package com.ceshi14;
    
    public interface Subject {
        
        /*增加观察者*/
        public void add(Observer observer);
        
        /*删除观察者*/
        public void del(Observer observer);
        
        /*通知所有的观察者*/
        public void notifyObservers();
        
        /*自身的操作*/
        public void operation();
    }

    其中通知所有的观察者的就是观察者模式。

    具体实现:

    package com.ceshi14;
    
    import java.util.Enumeration;
    import java.util.Vector;
    
    public abstract class AbstractSubject implements Subject{
        
        private Vector<Observer> vector = new Vector<Observer>();
        @Override
        public void add(Observer observer) {
            vector.add(observer);
        }
    
        @Override
        public void del(Observer observer) {
            vector.remove(observer);
        }
    
        @Override
        public void notifyObservers() {
            Enumeration<Observer> enumo = vector.elements();
            while(enumo.hasMoreElements()){
                enumo.nextElement().update();
            }
        }
    }
    package com.ceshi14;
    
    public class MySubject extends AbstractSubject{
    
        @Override
        public void operation() {
            System.out.println("更新自身!");
            notifyObservers();
        }
    
    }

    在这里,更新自身的同时通知其他观察者;

    package com.ceshi14;
    
    public class ObserverTest {
        
        public static void main(String[] args) {
            Subject sub = new MySubject();
            Observer1 observer1 = new Observer1();
            Observer2 observer2 = new Observer2();
            sub.add(observer1);
            sub.add(observer2);
            sub.operation();
            sub.del(observer2);
            sub.operation();
            
        }
        
    }

    结果:

    只是将观察者关联起来,有点类似于socket的群聊,发出一句话然后其他人都能收到

    这里其他人就算是观察者。这就是观察者模式

  • 相关阅读:
    连载:面向对象葵花宝典:思想、技巧与实践(2)
    关于虚拟化一些思考——不应该盲目使用
    Zimbra8.x邮件服务器安装及配置
    CodeForces 371D. Vessels
    【建模】UML类关系分析
    公式提取软件mathpix
    ROS多线程编程
    ROS节点的初始化及退出详解(ros::init、SIGINT、ros::ok、ros::NodeHandle
    ROS 日志消息(C++)
    Python 中的 if __name__ == '__main__' 该如何理解
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756185.html
Copyright © 2020-2023  润新知