观察者模式(基础)
来源:互联网 发布:新西兰博士含金量知乎 编辑:程序博客网 时间:2024/04/30 17:56
观察者模式(Observer)完美的将观察者和被观察的对象分离开。
观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
该模式主要包括观察者和被观察者。当被观察者发生改变的时候,观察者就会观察到这样的变化,并且做出相应的响应。
一、自定义
参考博文
package pattern_observer;public interface Watcher {public void update(String s);}
package pattern_observer;public interface Watched {public void addWatcher(Watcher watcher);public void removeWatcher(Watcher watcher);public void notifyWatchers(String s);}
package pattern_observer;public class ConcreteWatcher implements Watcher{public void update(String s){System.out.println(s);}}
package pattern_observer;import java.util.ArrayList;import java.util.List;public class ConcreteWatched implements Watched{private List<Watcher> list = new ArrayList<Watcher>(); public void addWatcher(Watcher watcher){list.add(watcher);}public void removeWatcher(Watcher watcher){list.remove(watcher);}public void notifyWatchers(String s){for(Watcher w: list){w.update(s);}}}
package pattern_observer;public class Test {public static void main(String[] args) {Watched girl = new ConcreteWatched();Watcher watcher1 = new ConcreteWatcher();Watcher watcher2 = new ConcreteWatcher();Watcher watcher3 = new ConcreteWatcher();girl.addWatcher(watcher3);girl.addWatcher(watcher2);girl.addWatcher(watcher1);girl.notifyWatchers("吃饭啦");}}
输出
二、使用 Java 包中的 Observable 类
package pattern_observer;import java.util.Observable;public class House extends Observable {private float price;public void setPrice(float price){this.setChanged();this.notifyObservers(price);this.price = price;}public float getPrice(){return this.price;}public House (float price){this.price = price;}public String toString(){return "房子价格为:" + this.price;}}
package pattern_observer;import java.util.Observable;import java.util.Observer;public class HousepriceObserver implements Observer{private String name;public HousepriceObserver(String name){super();this.name = name;}public void update(Observable o, Object arg){if(arg instanceof Float){System.out.println(this.name + "更改为" + ((Float)arg).floatValue());}}}
package pattern_observer;public class Demo {public static void main(String[] args) {House h = new House(10000);HousepriceObserver hpo1 = new HousepriceObserver("购房者A");HousepriceObserver hpo2 = new HousepriceObserver("购房者B");HousepriceObserver hpo3 = new HousepriceObserver("购房者C");h.addObserver(hpo1);h.addObserver(hpo2);h.addObserver(hpo3);System.out.println(h);h.setPrice(15000);System.out.println(h);}}
输出:
0 0
- 观察者模式(基础)
- 观察者模式基础实现(一)(Observer)
- 设计模式基础——观察者模式
- 观察者模式(OBSERVER)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(转)
- 观察者(Observer)模式
- 观察者(Observer)模式
- 观察者模式(Observer)
- 观察者模式(Observer)
- Observer(观察者)模式
- 观察者模式(Java)
- 观察者模式(Observer)
- Observer(观察者模式)
- 观察者模式(Observer)
- 观察者模式(Observer)
- 观察者模式(Observer)
- Linux输入子系统
- eclipse中web工程调试出现404的问题
- json_encode编码 和json_decode解码
- 微信:小程序于2017月1月9日发布
- ajax异步上传文件
- 观察者模式(基础)
- glide 集成okhttp3 解决https自签名证书问题
- cuda-cnn之mnist文件读取(1)
- Android中selector的使用
- D1带有陀螺仪的精度校准
- 【C语言学习笔记】printf,%n格式控制符中的异类?
- 【转载】PHP使用CURL抓取网站内容基础
- docker
- 进程间同步--互斥量和文件锁