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

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

  • 相关阅读:
    python-study-08
    第一周代码整理
    python-study-阶段总结
    python-study-07
    二分查找数组中与目标数字(可以是浮点型)最近的数的位置
    寻找最大数
    零件分组(stick)
    走迷宫
    自然数的拆分问题 字典序
    素数环(回溯)
  • 原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756185.html
Copyright © 2011-2022 走看看