多语言展示
当前在线:1835今日阅读:23今日分享:25

JAVA设计模式之观察者模式

JAVA设计模式之观察者模式
工具/原料
1

java

2

eclipse

方法/步骤
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);                        }                }                        }        }

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

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

4

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

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

6

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

推荐信息