已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
24.Observer样式应用于Android框架设计1.Framework的反向控制反向控制(InversionofControl)是应用框架(ApplicationFramework,简称AF)魅力的泉源。其常见的实现机制有二:1)继承(Inheritance)-这与TemplateMethod样式密切相关。2)委托(Delegation)-这与Observer样式密切相关。Android是个完全的AF,处处可见到反向控制的机制。当你熟悉上述的两种实现机制后,就会将之对应到TemplateMethod和Observer样式。然后藉由样式来更深刻体会这些机制的设计意涵。如此,除了更能活用Android之外,也能逐渐提升你自己设计新AF的兴趣、能力和信心。2.复习:使用继承(即TemplateMethod样式)兹复习你已经熟悉的TemplateMethod样式,如下述之范例:/Student.javapublicclassStudentprivateStringm_name;privateintm_credit;Student(Stringna,intcr)m_name=na;m_credit=cr;publicvoidprint()System.out.println(m_name+,+String.valueOf(template_computeTuition();publicfloattemplate_computeTuition()if(m_credit6)m_credit=6;returnhook_getValue(m_credit)+5000;protectedfloathook_getValue(intcredit)return(credit-1)*500;/Graduate_Student.javapublicclassGraduate_StudentextendsStudentGraduate_Student(Stringna,intcr)super(na,cr);protectedfloathook_getValue(intcredit)returncredit*700;/Undergraduate_Student.javapublicclassUndergraduate_StudentextendsStudentUndergraduate_Student(Stringna,intcr)super(na,cr);/JMain.javapublicclassJMainpublicstaticvoidmain(Stringargs)intcredit=5;Graduate_Studentmike=newGraduate_Student(Mike,5);mike.print();Undergraduate_Studentlinda=newUndergraduate_Student(Linda,7);linda.print();这是以TemplateMethod样式来实践反向控制。3.使用委托(即Observer样式)在TemplateMethod样式里,hookmethod的具体实现是撰写在子类别里。使用委托时,则将hookmethod定义于独立的类别里,如下述的HookClass:把hookmethod定义于另外的类别:/HookClass.javapublicclassHookClassprotectedfloatgetValue(intcredit)return(credit-1)*500;templatemethod委托HookClass类别之对象去处理客制化的部份:/Student.javapublicclassStudentprivateStringm_name;privateintm_credit;privateHookClasshookObject=null;Student(Stringna,intcr)m_name=na;m_credit=cr;publicvoidsetHook(HookClasshk)hookObject=hk;publicvoidprint()System.out.println(m_name+,+String.valueOf(template_computeTuition();publicfloattemplate_computeTuition()if(m_credit6)m_credit=6;returnhookObject.getValue(m_credit)+5000;定义HookClass的子类别:GraduateHook,并且让Student的对象委托给GraduateHook子类别之对象:/Graduate_Student.javapublicclassGraduate_StudentextendsStudentGraduate_Student(Stringna,intcr)super(na,cr);setHook(newGraduateHook();privatestaticclassGraduateHookextendsHookClassOverrideprotectedfloatgetValue(intcredit)returncredit*700;/JMain.javapublicclassJMainpublicstaticvoidmain(Stringargs)intcredit=5;Studentmike=newGraduate_Student(Mike,credit);mike.print();于是,Student类别的templatemethod呼叫了HookClass抽象类别的getValue()函数,进而反向呼叫到GraduateHook子类别的getValue()函数。4.GoF的Observer样式在GoF的一书里,其Observer样式的架构图为:图1Observer样式GoF这里的Subject类别就对应到上述程序代码的Student类别。ConcreteSubject就对应到Graduate_Student类别。Observer类别对应到HookClass。ConcreteObserver对应到GraduateHook类别。5.Observer样式又称为Listener样式上述的范例可改写为:/IListener.javapublicinterfaceIListenerfloatgetValue(intcredit);/Student.javapublicclassStudentprivateStringm_name;privateintm_credit;privateIListenerplis=null;Student(Stringna,intcr)m_name=na;m_credit=cr;publicvoidsetListener(IListenerlis)plis=lis;publicvoidprint()System.out.println(m_name+,+String.valueOf(template_computeTuition();publicfloattemplate_computeTuition()if(m_credit6)m_credit=6;returnplis.getValue(m_credit)+5000;/Graduate_Student.javapublicclassGraduate_StudentextendsStudentGraduate_Student(Stringna,intcr)super(na,cr);setListener(newGraduateListener();privatestaticclassGraduateListenerimplementsIListenerpublicfloatgetValue(intcredit)returncredit*700;/JMain.javapublicclassJMainpublicstaticvoidmain(Stringargs)intcredit=5;Studentmike=newGraduate_Student(Mike,credit);mike.print();6.欣赏Android里的Observer样式(即Listener样式)-欣赏Android程序范例6.1画面情境撰写程序建立Android程序项目:/ac01.javapackagecom.misoo.pkzz;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassac01extendsActivityOverridepublicvoidonCreate(Bundleicicle)super.onCreate(icicle);setContentView(R.layout.main);Buttonbtn=(Button)findViewById(R.id.button);Buttonbtn2=(Button)findViewById(R.id.button2);btn.setBackgroundResource(R.drawable.gray);btn.setOnClickListener(clickListener);btn2.setBackgroundResource(R.drawable.byw);btn2.setOnClickListener(clickListener_2);OnClickListenerclickListener=newOnClickListener()publicvoidonClick(Viewv)Stringname=(Button)v).getText().toString();setTitle(name+buttonc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源行业绿色产业发展现状与挑战研究报告
- 2025乌鲁木齐市第三十六中学招聘考试笔试备考试题及答案解析
- 2025年新能源行业储能系统安装工程师培训课程分析报告
- 2025晋城市妇幼保健院招聘护理人员笔试考试参考试题及答案解析
- 2025年西安未央区馨和居幼儿园招聘考试笔试备考试题及答案解析
- 2025湖北恩施市福牛物业有限公司招聘工作人员10人考试笔试模拟试题及答案解析
- 《JBT9220.3-1999 铸造化铁炉酸性炉渣化学分析方法重铬酸钾容量法测定氧化亚铁量》(2026年)实施指南
- 2025广东广州市白云区龙归街中心幼儿园人事招聘考试笔试备考试题及答案解析
- 武汉市芳草高级中学招聘高中教师3人考试笔试备考试题及答案解析
- 2025广东揭阳市揭西县公安局招聘警务辅助人员80人笔试考试参考试题及答案解析
- 2025浙江宁波市北仑区交通投资集团有限公司招聘矿山专职技术人员6人笔试历年常考点试题专练附带答案详解试卷2套
- 寺院消防安全培训课件
- 2022北京首都师大附中高一12月月考数学(教师版)
- 35kV线路施工检修方案范本
- 北京某中学2026届高三年级上册开学考试 英语试题(含答案)
- 中层管理人员竞聘笔试题及部分参考答案
- 参考活动4 神奇的DNA教学设计-2025-2026学年初中综合实践活动苏少版七年级上册-苏少版
- (正式版)DB65∕T 4687-2023 《10千伏客户业扩工程典型设计规范》
- 2024年12月贵州高中学业水平考试化学试卷真题(含答案详解)
- 2025年香港招聘薪酬和福利报告(英文版)-Jobsdb by Seek
- 2025三亚市劳动合同范本
评论
0/150
提交评论