JAVA设计模式之观察者模式

2025-10-24 17:46:56

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设计模式之观察者模式

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢