文章目录
观察者(Observer)模式被观察者观察者测试这两个观察者 和 产品列表的被观察者:
观察者(Observer)模式
观察者模式又称为发布订阅模式,是对象的行为模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发生变化是,会通知所有观察者,并让其自动更新自己。
被观察者
被观察者需要继承Observable类。调用addObserver方法,添加观察者。调用setChanged方法,用于告知观察者当前被观察者发生了变化,如果没有,则无法触发其行为。notifyObservers告知观察者,让它们发生相应的动作,并将新产品作为参数传递给观察者。
package com
.lean
.ssm
.chapter2
.observer
;
import java
.util
.ArrayList
;
import java
.util
.List
;
import java
.util
.Observable
;
import java
.util
.Observer
;
public class ProductList extends Observable {
private List
<String> productList
= null
;
private static ProductList instance
;
private ProductList() {}
public static ProductList
getInstance() {
if (instance
== null
) {
instance
= new ProductList();
instance
.productList
= new ArrayList<String>();
}
return instance
;
}
public void addProductListObserver(Observer observer
) {
this.addObserver(observer
);
}
public void addProudct(String newProduct
) {
productList
.add(newProduct
);
System
.err
.println("产品列表新增了产品:"+newProduct
);
this.setChanged();
this.notifyObservers(newProduct
);
}
}
这个类的一些基本内容和主要方法如下:
构建方法私有化,避免通过new的方式创建对象,而是通过getInstance方法获得产品列表单例,这里使用的是单例模式。addProductListObserver可以增加一个电商接口(观察者)。核心逻辑在addProduct方法上。在产品列表上增加了一个新的产品,然后调用setChanged方法。这个方法用于告知观察者当前被观察者发生了变化,如果没有,则无法触发其行为。最后通过notifyObservers告知观察者,让它们发生相应的动作,并将新产品作为参数传递给观察者。
观察者
观察者需要实现java.util.Observer接口的update方法。
package com
.lean
.ssm
.chapter2
.observer
;
import java
.util
.Observable
;
import java
.util
.Observer
;
public class JingDongObserver implements Observer {
@Override
public void update(Observable o
, Object product
) {
String newProduct
= (String
) product
;
System
.err
.println("发送新产品【"+newProduct
+"】同步到京东商城");
}
}
package com
.lean
.ssm
.chapter2
.observer
;
import java
.util
.Observable
;
import java
.util
.Observer
;
public class TaoBaoObserver implements Observer {
@Override
public void update(Observable o
, Object product
) {
String newProduct
= (String
) product
;
System
.err
.println("发送新产品【"+newProduct
+"】同步到淘宝商城");
}
}
测试这两个观察者 和 产品列表的被观察者:
package com
.lean
.ssm
.chapter2
.observer
;
public class ObserverTest {
public static void main(String
[] args
) {
ProductList observable
= ProductList
.getInstance();
TaoBaoObserver taoBaoObserver
= new TaoBaoObserver();
JingDongObserver jdObserver
= new JingDongObserver();
observable
.addObserver(jdObserver
);
observable
.addObserver(taoBaoObserver
);
observable
.addProudct("新增产品1");
}
}
执行结果:
产品列表新增了产品:新增产品1
发送新产品【新增产品1】同步到淘宝商城
发送新产品【新增产品1】同步到京东商城