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();
        }
    }
    

      

    运行结果:

      

      

  • 相关阅读:
    Centos6.5下本地yum源及局域网yum源配置
    计算机网络之应用层_part -3
    计算机网络之应用层_part -2
    计算机网络之应用层_part -1
    LeetCode-Minimum Path Sum[dp]
    LeetCode-Interleaving String[dp]
    LeetCode-Best Time to Buy and Sell Stock III[dp]
    LeetCode-Palindrome Partitioning II[dp]
    用hexo + github 快速搭建个人博客,由于刚搭建好,有点小激动,就分享下,不好的地方还请指出,谢谢
    搭建node.js 本地服务器
  • 原文地址:https://www.cnblogs.com/Hangtutu/p/9252443.html
Copyright © 2011-2022 走看看