首页 > 移动平台 > 详细

必须做作业三:某Android端点餐App中观察者模式解析

时间:2018-10-23 16:13:59      阅读:211      评论:0      收藏:0      [点我收藏+]

该项目还在开发中,目前开发了原型界面,是为了实现顾客从点餐到付款的全行为流程。并且提供菜品的详情页面和其他服务接口。

在此就以点餐界面的实现为例,分析该项目的观察者模式

 

一、模式解析

该App在点餐界面中实现了三个监听接口:OnClickListener,OnScrollListener和OnCheckedChangeListener

其中OnClickListener和OnScrollListener分别用来监听View的Click事件和AbsListView的滚动事件

 

1. BtnClickListener 用来监听按钮的点击事件,ItemClickListener用来监听ListItem的点击事件,点击事件的通知方法是继承自View类的performClick方法,同时View类的setOnClickListener方法用来注册clickListener监听器,由其mOnClickListener变量记录

github:https://github.com/DragonX081/Android_Original_Code_ASE/blob/master/android/view/View.java

(由于代码太长无法预览,不能直接指明行数,所以手动标注:4290行,6403行,6597行)分别进行了监听器的注册和通知

 

View.java #L4290 :点击监听器的声明

技术分享图片

View.java #L6403 : 注册点击监听器

技术分享图片

View.java #L6597: 通知点击监听器

技术分享图片

 

 

2. OnScrollListener用来监听ListView的滚动事件,由ListView的setOnScrollListener方法来注册,并由其继承自AbsListView的mOnScrollListener变量来记录,用继承自AbsListView的reportScrollStateChange()方法来通知

github https://github.com/DragonX081/Android_Original_Code_ASE/blob/master/android\widget\AbsListView.java

 AbsListView.java #L466 : 声明了滚动监听器

技术分享图片

 

 AbsListView.java#L1464 :滚动监听器的注册

技术分享图片

AbsListView.java #L3504 :通知监听器滚动状态改变

技术分享图片

AbsListView.java #L4558 : 通知方法

技术分享图片

 

3.OnCheckedChangeListener用来监听RadioGroup的按钮点击事件,用setOnCHeckedChangListener来注册监听器并用setCheckedId方法来通知

github :https://github.com/DragonX081/Android_Original_Code_ASE/blob/master/android\widget\RadioGroup.java

RadioGroup.java #L66 : 声明Checked变动监听器

技术分享图片

 

RadioGroup.java #L241 :注册CheckedChangeListener

技术分享图片

RadioGroup.java #L185 :对Checked变更监听器进行通知

技术分享图片

 

 类图整理如下

 技术分享图片

二、模式优点

1. 在这里利用观察者模式构建了被观察对象和监听接口,被观察对象只需知道这一个接口,而无需关心观察者或监听器的具体实现。这样使得观察者和监听器处于低耦合状态,增强了代码的可维护性。

2. 通过调用通知方法,可以通知注册过的监听器,可以实现广播机制(但这里没用到)。

3.随时可以在实现观察者接口时重写,被通知时的响应方法,易于程序的开发。

 

必须做作业三:某Android端点餐App中观察者模式解析

原文:https://www.cnblogs.com/dragonx081/p/9813636.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!