• 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的群聊,发出一句话然后其他人都能收到

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

  • 相关阅读:
    vue源码分析—Vue.js 源码目录设计
    vue源码分析—认识 Flow
    在Windows上安装配置MongoDB
    mongoDB概述
    Could not load file or assembly Microsoft.Web.Infrastructure
    配置错误 不能在此路径中使用此配置节(转)
    VS2013快捷键大全
    Create new tool for CSV
    How to get http response.
    C#中Split用法
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756185.html
Copyright © 2020-2023  润新知