zoukankan      html  css  js  c++  java
  • Observer模式

    Observer.java

    观察者

    public interface Observer {
        void update(NumberGenerate numberGenerate);
    }
    

      

    DigitObserver.java

    数字观察者

    public class DigitObserver implements Observer {
    
        @Override
        public void update(NumberGenerate numberGenerate) {
            System.out.println("DigitObserver: " + numberGenerate.getNumber());
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    GraphObserver.java

    图像观察者

    public class GraphObserver implements Observer {
        @Override
        public void update(NumberGenerate numberGenerate) {
            System.out.println("GraphObserver: ");
            int count = numberGenerate.getNumber();
            for (int i = 0; i < count; i++) {
                System.out.print("*");
            }
            System.out.println();
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    

    NumberGenerate.java

    被观察者的抽象类

    public abstract class NumberGenerate {
        private List<Observer> observers = new ArrayList<>();
    
        public void addObserver(Observer observer) { //注册observer
            observers.add(observer);
        }
    
        public void deleteobserver(Observer observer) { //删除observer
            observers.remove(observer);
        }
    
        public void notifyObservers() { //向observer发送通知
            Iterator it = observers.iterator();
            while (it.hasNext()) {
                Observer o = (Observer) it.next();
                o.update(this);
            }
    
        }
    
        public abstract int getNumber();//获取数值
    
        public abstract void execute();//生成数值
    }
    

      

    RandomNumberGenerator.java

    被观察者-随机数生成器

    public class RandomNumberGenerator extends NumberGenerate {
        private Random random = new Random();
        private int number;
    
        @Override
        public int getNumber() {
            return number;
        }
    
        @Override
        public void execute() {
            for (int i = 0; i < 20; i++) {
                number = random.nextInt(50);
                notifyObservers();
            }
        }
    }
    

     

    Main.java 

    测试类

    public class Main {
        public static void main(String[] args) {
            NumberGenerate generate = new RandomNumberGenerator();
            Observer observer1 = new DigitObserver();
            Observer observer2 = new GraphObserver();
            generate.addObserver(observer1);
            generate.addObserver(observer2);
            generate.execute();
        }
    }
    

      

    运行结果:

      

      

  • 相关阅读:
    NodeJs使用Mysql模块实现事务处理
    Javascript(JS)对Cookie的读取、删除、写入操作帮助方法
    SLERP 导数
    General matrix representations for B-splines 论文理解
    搭建私人实体编译服务器
    A Micro Lie Theory 论文理解
    [备忘,无新意] undistort (求反函数对某个值的映射)使用迭代优化方法
    Dual Quaternion representing Rigid Transformation
    B 样条曲线的 SE(3) 应用
    [ceres-solver] From QuaternionParameterization to LocalParameterization
  • 原文地址:https://www.cnblogs.com/Hangtutu/p/9252443.html
Copyright © 2011-2022 走看看