购物车中的观察者模式的应用

观察者模式其实就是   比如 给一个adapter设置了一个观察者  当adapter调用notifyDatasetchaged()方法时 会执行观察者中的回调方法

 1 package com.xqx.adapterobserver;
 2
 3 import android.app.Activity;
 4 import android.database.DataSetObserver;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.*;
 8 import org.w3c.dom.Text;
 9
10 import java.util.ArrayList;
11 import java.util.List;
12
13 public class MainActivity extends Activity {
14     /**
15      * Called when the activity is first created.
16      */
17
18     private ArrayAdapter<Integer> adapter ;
19     private List<Integer> list;
20     private ListView listView;
21     private TextView text;
22
23     //创建观察者
24     private DataSetObserver sumObserver = new DataSetObserver() {
25         /**
26          * 当Adapter的notifyDataSetChanged方法执行时被调用
27          */
28         @Override
29         public void onChanged() {
30             super.onChanged();
31             //执行相应的操作
32             int sum = 0;
33             for (int i = 0; i < list.size(); i++) {
34                 sum+=list.get(i);
35             }
36             text.setText("总金额:"+sum);
37         }
38
39         /**
40          * 当Adapter 调用 notifyDataSetInvalidate方法执行时被调用
41          */
42         @Override
43         public void onInvalidated() {
44             super.onInvalidated();
45             //执行相应的操作
46         }
47     };
48     @Override
49     public void onCreate(Bundle savedInstanceState) {
50         super.onCreate(savedInstanceState);
51         setContentView(R.layout.main);
52
53         list = new ArrayList<Integer>();
54         for (int i = 0; i < 30; i++) {
55             list.add(0);
56         }
57         adapter = new ArrayAdapter<Integer>(this,android.R.layout.simple_list_item_1,list);
58         //注册观察者
59         adapter.registerDataSetObserver(sumObserver);
60         text = (TextView) findViewById(R.id.text);
61         listView = (ListView) findViewById(R.id.listView);
62         listView.setAdapter(adapter);
63
64         listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
65             @Override
66             public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
67                 list.set(i,2);
68                 //将列表项的0变为2 更新适配器,
69                 adapter.notifyDataSetChanged();
70                 //执行该方法后DataSetObserver观察者观察到
71             }
72         });
73
74     }
75
76     @Override
77     protected void onDestroy() {
78         super.onDestroy();
79         //注销观察者
80         adapter.unregisterDataSetObserver(sumObserver);
81     }
82 }
83
84 MainActivity.java

activity

时间: 2024-10-16 15:34:52

购物车中的观察者模式的应用的相关文章

关于匿名函数的使用,购物车中计算销售税的应用

php匿名函数又叫闭包函数,可以起到精简代码的作用,下面是购物车中的应用: class Cart { const PRICE_BUTTER = 1.00; const PRICE_MILK = 3.00; const PRICE_EGGS = 6.95; protected $products = array(); public function add($product, $quantity) { $this->products[$product] = $quantity; } public

[设计模式]NetworkManagementService中的观察者模式

观察者模式 观察者模式有如下角色 (1)被观察者(Subject) (2)观察者(Observer) public class Subject{ private: list<Observer> mObservers; protect: void onChange(){ for(int i=0; i<mObservers.size(); ++i){ mObservers.get(i).onAction(); } } public: void attach(Observer m){ mObs

ajax在购物车中的应用

代码如下: 购物车页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv=&quo

ListView中的观察者模式

*本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 虽然现在RecyclerView很好用,也在逐渐替代ListView.很多github的开源大神也在对其进行更加实用的封装.我现在写的一个音乐播放器也在使用RecyclerView.但是这些都不阻碍我们学习ListView优秀的源码设计. 播放器我想要写的精美,但现在越写越多bug,这也应该是我离开大学校园,实习前的最后一个小作品了,接下来的半年多的时间要冲刺复习咯. 进入正题,我用的是Api-23的源码.接下来就从源码的角度

单片机中应用观察者模式

?? 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN8 开发环境:MDK5.13 mcu: stm32f103RB 说明: 之前在java中应用观察者模式,现将此模式的思想应用在单片机程序设计中 Android编程:观察者模式设计: http://blog.csdn.net/jdh99/article/details/41821295 观察者模式本质: 有两个模块A,B.A是目标,B是观察者.则B能观察到A的变化. 在程序实现

【安卓笔记】数据适配器(adapter)中的观察者模式

ListView要想显示数据,需要用到数据适配器即Adapter.而当我们删除ListView的某个条目时,数据适配器中的数据源必然发生改变,这时候我们通过调用适配器类提供的notifyDataSetChanged方法通知listview数据发生改变,请求重新绘制. 这其中其实使用了一种比较常见的设计模式,即观察者模式. 在分析数据适配器中涉及到的观察者模式之前,我们先简单了解下什么是观察者模式. 观察者模式的定义:定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象

jQuery中的观察者模式(Observer Pattern)

在jQuery中,on方法可以为元素绑定事件,trigger方法可以手动触发事件,围绕这2个方法,我们来体验jQuery中的观察者模式(Observer Pattern). ■ on方法绑定内置事件,自然触发 比如,我们给页面的body元素绑定一个click事件,这样写. <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title&

微信订阅号的关注和消息推送中的观察者模式

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主体对象的状态变化会通知所有观察者对象.观察者模式又叫做发布-订阅模式.模型-视图模式.源-监听器模式或从属者模式.这种模式在我们实际生活中并不鲜见,比如订牛奶.订报纸.我们订阅了某报纸之后,一旦报纸有新版出来,就会送到我们报箱或手中,去过取消订阅,那么也就再也收不到了.有了互联网之后,无论是微博好友还是微信订阅号,我们都可以"关注"和"取消关注",关注了就可以收到信息推动.这些都是观察者

在商城系统中使用设计模式----策略模式之在spring中使用观察者模式和发布/订阅

1.概念: 观察者模式: 是属于设计者模式中的一种,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知. 发布/订阅: 是一种消息范式,消息的发送者(称为发布者)不会将消息直接发送给特定的接收者(称为订阅者),而是通过调度器将消息发布给订阅者. 2.区别:下图明显可以看出发布/订阅比观察者模式中多了一层中间信道, 在Observer模式中,O bservers知道Subject,同时Subject还保留了Observers的记录.然而,在发布者/订阅者中,发布者和订阅