zoukankan      html  css  js  c++  java
  • 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的群聊,发出一句话然后其他人都能收到

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

  • 相关阅读:
    nmp部署(Nginx Mariadb Php-fpm)
    通过能别的主机连接yum库
    基于ftp服务实现yum网络共享
    nginx做代理部署WordPress
    练习题
    php-fpm包的安装与配置
    安装mariadb并修改配置文件
    mysql的简单操作
    telnet IP:ERROR
    加固mysql服务器
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756185.html
Copyright © 2011-2022 走看看