通过一个熟悉的流程,来体验一下什么是observe模式。
问题起源:
我们在网上买东西,没钱买的时候经常先加到购物车当中。购物车中的商品如果打折,会及时的通知用户。对于设计者来说,我们自然会提问几个问题。(我们可以想象到商品上面安装了某个监听器,会及时的通知我们)
问题:
商品:
是那件商品折扣通知给用户?通知那些用户?将商品加到购物车当中的用户(把谁通知给谁)
通知用户那些内容呢?
用户:
用户收到的是那件商品的折扣呢?(用户购物车当中有很多商品)
上面提的几个问题,是自然而然提出的。那如何解决呢?
首先分析:
是那件商品这头通知给用户?是改变价格的商品。
通知那些用户?将商品添加到购物车当中的用户。
通知用户那些内容?商品名称和几个折扣
代码:
import java.util.ArrayList;
/*
* 有很多商品。
* 谁在监听着商品:(商品价格变化通知那个用户)(用户得注册监听商品)。
* 通知信息:通知那些信息,给谁。(给监听该商品的用户)
* 商品有很多,所以用接口。
*/
interface products{
public void registerObserve(customer ob);
public void removeObserve(customer ob);
public void noticefyAllObservers();
}
/*
* 接收监听来的商品信息。
* 用户有很多,所以用接口。
*/
interface customers{
public void update(products messages);
}
class product implements products{
private ArrayList
private ArrayList
private ArrayList
public product(){
cus = new ArrayList
price = new ArrayList
productName = new ArrayList
}
public void registerObserve(customer ob) {
this.cus.add(ob);
}
public void removeObserve(customer ob) {
}
public void noticefyAllObservers() {
for(customer custo : cus){
custo.update(this);
}
}
public void set(String name,String price){
this.price.add(price);
this.productName.add(name);
this.noticefyAllObservers();
}
public String toString(){
return productName.toString()+price.toString();
}
}
class customer implements customers{
private String name;
public customer(String name){
this.name = name;
}
public void update(products messages) {
System.out.println(this.name + ":商品价格变化");
System.out.println(messages);
}
}
public class chenge{
public static void main(String[] args){
customer cus = new customer("贾少坤");
product pro = new product();
pro.registerObserve(cus);
pro.set("羽绒服","120");
}
}