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

      

    运行结果:

      

      

  • 相关阅读:
    Foundation框架
    OC中四种遍历方式
    OC中NSLog函数输出格式罗列
    字典NSDictionary和NSMutableDictionary的使用
    增加自己的作图能力
    使用forin循环时的注意事项
    固定資産管理
    SAPの販売管理で、価格設定をするまでの関連カスタマイズ画面
    【販売管理】荷印(ケースマーク)の記載内容および記載方法
    購買(MM)用語と意味の一覧
  • 原文地址:https://www.cnblogs.com/Hangtutu/p/9252443.html
Copyright © 2011-2022 走看看