zoukankan      html  css  js  c++  java
  • 观察者模式【java版】

    一、定义观察者类

     1)观察者DiningObserver

    public class DiningObserver implements Observer {

    //只需要实现Observer接口中的update方法
    public void update(Observable o, Object arg) {
    if(arg.equals("Dining") ){
    System.out.println("我是观察者DiningObserver,当前被观察者的状态为:Dining!");
    }else{
    System.out.println("我是观察者DiningObserver,但状态不匹配");
    }
    }
    }

     2)观察者SleepingObserver

    public class SleepingObserver implements Observer {

    //只需要实现Observer接口中的update方法
    public void update(Observable o, Object arg) {
    if(arg.equals("Sleeping") ){
    System.out.println("我是观察者SleepingObserver,当前被观察者的状态为:Sleeping!");
    }else{
    System.out.println("我是观察者SleepingObserver,但状态不匹配");
    }
    }
    }

     3)观察者WorkingObserver

    public class WorkingObserver implements Observer {

    //只需要实现Observer接口中的update方法
    public void update(Observable o, Object arg) {
    if(arg.equals("Working") ){
    System.out.println("我是观察者WorkingObserver,当前被观察者的状态为:Working!");
    }else{
    System.out.println("我是观察者WorkingObserver,但状态不匹配");
    }
    }
    }

    二、定义被观察者类

    public class ConcreteObserved extends Observable {

    public ConcreteObserved(String state) {
    this.state=state;
    }

    /*
    * 使用者基本只需要自己定义一个方法,决定在什么情况下通知所有观察者
    * 在自定义的这个方法里,都是直接调用父类的方法
    */
    public void modifyState(String state){
    this.state=state;
    setChanged();//一定要设置改变位
    notifyObservers(this.state);//将参数通知到每个观察者
    //通知完之后会自动调用clearChanged方法
    }

    private String state;
    }

    三、测试

    public class Main {

    public static void main(String[] args) {

    System.out.println("开始测试观察者模式。。。");

    //创建三个观察者
    DiningObserver theDiningObserver=new DiningObserver();
    SleepingObserver theSleepingObserver=new SleepingObserver();
    WorkingObserver theWorkingObserver=new WorkingObserver();

    //创建一个被观察者
    ConcreteObserved theConcreteObserved=new ConcreteObserved(new String("NoState"));

    //将三个观察者都添加到被观察者的观察者列表中
    theConcreteObserved.addObserver(theDiningObserver);
    theConcreteObserved.addObserver(theSleepingObserver);
    theConcreteObserved.addObserver(theWorkingObserver);

    //被观察者状态发生改变
    theConcreteObserved.modifyState(new String("Dining"));
    }

    }

     运行结果:



  • 相关阅读:
    PowerShell 显示气球提示框 2
    BAT 删除隐藏文件
    批处理文件 bat 后台运行
    CMD 命令2
    CMD 命令1
    PowerShell 显示气球提示框 1
    查看SQL Server的版本及License
    How to extract a complete list of extension types within a directory?
    Wordpress无法连接Mysql8的问题
    What is `^M` and how do I get rid of it?
  • 原文地址:https://www.cnblogs.com/edisonfeng/p/2289096.html
Copyright © 2011-2022 走看看