• 猫叫老鼠跑-观察者模式


      当一个对象的状态发生改变时,他的所有依赖者都会收到通知并自动更新---------观察者模式

      即,猫A发出了叫声,老鼠B(老鼠C,D,E,F...)听到了这个声音,立即掉头就跑.

     1 package ares.core;
     2 
     3 import java.util.ArrayList;
     4 
     5 public class Cat implements Subject {
     6     private ArrayList<Observer> observers = new ArrayList<Observer>();
     7     private String name;
     8 
     9     public Cat(String name) {
    10         this.name = name;
    11     }
    12     
    13     public String getName() {
    14         return this.name;
    15     }
    16 
    17     @Override
    18     public void register(Observer o) {
    19         observers.add(o);
    20     }
    21 
    22     @Override
    23     public void remove(Observer o) {
    24         if (observers != null && observers.size() > 0) {
    25             int index = observers.indexOf(o);
    26             if (index >= 0) {
    27                 observers.remove(index);
    28             }
    29         }
    30     }
    31 
    32     @Override
    33     public void notifyObserver() {
    34         for (Observer observer : observers) {
    35             observer.listen();
    36         }
    37     }
    38 
    39     public void shout() {
    40         System.out.println(this.name+":喵~喵~");
    41         notifyObserver();
    42     }
    43 
    44 }
    1 package ares.core;
    2 
    3 public interface Subject {
    4     public void register(Observer o);
    5 
    6     public void remove(Observer o);
    7 
    8     public void notifyObserver();
    9 }
     1 package ares.core;
     2 
     3 public class Mouse implements Observer {
     4     private Cat cat;
     5     private String name;
     6 
     7     Mouse(String name, Cat cat) {
     8         this.name = name;
     9         this.cat = cat;
    10         cat.register(this);
    11     }
    12 
    13     @Override
    14     public void listen() {
    15         System.out.println(this.name + "听见"+cat.getName()+"叫!");
    16         run();
    17     }
    18 
    19     public void run() {
    20         System.out.println(this.name + ":"+cat.getName()+"来了,兄弟们快跑");
    21     }
    22 
    23 }
    1 package ares.core;
    2 
    3 public interface Observer {
    4     public void listen();
    5 }
    package ares.core;
    
    public class Main {
    
        public static void main(String[] args) {
            Cat cat = new Cat("大洋芋");
            Mouse mouse=new Mouse("小米渣", cat);
            cat.shout();
        }
    
    }

  • 相关阅读:
    毕业3年在北京买房,他是怎么赚钱攒钱的?
    Windows Server 2008 如何在IIS中添加MIME类型
    IIS下无法访问.ini后缀文件
    新的一年,我们如何才能收获满满,不留太多遗憾呢?
    你百分之九十九的问题都是因为懒
    为什么你容许陌生人成功,却无法忍受身边人发达
    堆排序
    计数排序
    直接插入排序
    冒泡排序
  • 原文地址:https://www.cnblogs.com/liunlls/p/observer2.html
Copyright © 2020-2023  润新知