JAVA设计模式之观察者模式

 时间:2026-02-12 14:27:49

1、观察者设计模式模拟是一个非常有意思的设计模式,可以理解为一触即发。如果要想实现观察者的设计模式需要以下的两个程序结构:

观察者:java.util.Observer;

被观察者:java.util.Observable;

范例:实现观察者:

//这些是所有的观察者

class Person implements Observer {

        @Override

        public void update(Observable o, Object arg) {

                //一旦你关注的事情发生了变化

                if(o instanceof House) {

                        if(arg instanceof Double) {

                                System.out.println("房价上涨!新价格:" + arg);

                        }

                }

                

        }

        

}

JAVA设计模式之观察者模式

2、实现被观察者:当房价上涨时通知观察者。

class House extends Observable {

        private double price;

        

        public House(double price) {

                this.price  = price;

        }

        

        public void setPrice(double price) {

                if(price > this.price) {

                        super.setChanged(); //现在关注的价格改变了

                        super.notifyObservers(price); //唤醒所有的观察者

                }

                

                this.price = price;

        }

}

JAVA设计模式之观察者模式

3、在客户端注册观察者:

public class ObserverDesign {

        public static void main(String[] args) {

                Person personA = new Person();

                Person personB = new Person();

                Person personC = new Person();

                

                //设置观察者

                House house = new House(8000000);

                house.addObserver(personC);

                house.addObserver(personB);

                house.addObserver(personA);

                

                house.setPrice(9000000);

        }

        

}

JAVA设计模式之观察者模式

4、当房价上涨时执行main主方法观察者会收到通知:

JAVA设计模式之观察者模式

5、当房价下降执行main主方法观察者不会收到通知:

package com.gwolf.design;

import java.util.Observable;

import java.util.Observer;

//这些是所有的观察者

class Person implements Observer {

        @Override

        public void update(Observable o, Object arg) {

                //一旦你关注的事情发生了变化

                if(o instanceof House) {

                        if(arg instanceof Double) {

                                System.out.println("房价上涨!新价格:" + arg);

                        }

                }

                

        }

        

}

//被观察者

class House extends Observable {

        private double price;

        

        public House(double price) {

                this.price  = price;

        }

        

        public void setPrice(double price) {

                if(price > this.price) {

                        super.setChanged(); //现在关注的价格改变了

                        super.notifyObservers(price); //唤醒所有的观察者

                }

                

                this.price = price;

        }

}

public class ObserverDesign {

        public static void main(String[] args) {

                Person personA = new Person();

                Person personB = new Person();

                Person personC = new Person();

                

                //设置观察者

                House house = new House(8000000);

                house.addObserver(personC);

                house.addObserver(personB);

                house.addObserver(personA);

                

                house.setPrice(7000000);

        }

        

}

JAVA设计模式之观察者模式

6、执行main主方法,我们将看到控制台不会有任何输出。

JAVA设计模式之观察者模式

  • 设计模式笔记之观察者模式
  • Unity 设计模式之 观察者模式的实例介绍
  • php的观察者模式
  • 观察者图文攻略
  • 我的世界怎么制作观察者陷阱
  • 热门搜索
    厦门旅游培训中心 武当山旅游网 紫鹊界梯田旅游攻略 梅里雪山旅游 过年旅游 朝阳旅游景点大全 顺义旅游景点 粤西旅游景点大全 斯里兰卡旅游费用 庄河旅游景点大全