java观察着observer模式---商品价格变动通知客户

本文通过一个具体的购物车商品折扣通知场景,介绍了观察者模式的基本原理和实现方式。文中详细展示了如何利用Java实现观察者模式,包括商品作为被观察对象及用户作为观察者的具体代码实现。

通过一个熟悉的流程,来体验一下什么是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<customer> cus;

private  ArrayList<String> price;

private  ArrayList<String> productName;

public product(){

cus = new ArrayList<customer>();

price = new ArrayList<String>();

productName = new ArrayList<String>();

}

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值