已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
24.Observer樣式應(yīng)用于A(yíng)ndroid框架設(shè)計(jì)1.Framework的反向控制反向控制(InversionofControl)是應(yīng)用框架(ApplicationFramework,簡(jiǎn)稱(chēng)AF)魅力的泉源。其常見(jiàn)的實(shí)現(xiàn)機(jī)制有二:1)繼承(Inheritance)-這與TemplateMethod樣式密切相關(guān)。2)委托(Delegation)-這與Observer樣式密切相關(guān)。Android是個(gè)完全的AF,處處可見(jiàn)到反向控制的機(jī)制。當(dāng)你熟悉上述的兩種實(shí)現(xiàn)機(jī)制后,就會(huì)將之對(duì)應(yīng)到TemplateMethod和Observer樣式。然后藉由樣式來(lái)更深刻體會(huì)這些機(jī)制的設(shè)計(jì)意涵。如此,除了更能活用Android之外,也能逐漸提升你自己設(shè)計(jì)新AF的興趣、能力和信心。2.復(fù)習(xí):使用繼承(即TemplateMethod樣式)茲復(fù)習(xí)你已經(jīng)熟悉的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樣式來(lái)實(shí)踐反向控制。3.使用委托(即Observer樣式)在TemplateMethod樣式里,hookmethod的具體實(shí)現(xiàn)是撰寫(xiě)在子類(lèi)別里。使用委托時(shí),則將hookmethod定義于獨(dú)立的類(lèi)別里,如下述的HookClass:把hookmethod定義于另外的類(lèi)別:/HookClass.javapublicclassHookClassprotectedfloatgetValue(intcredit)return(credit-1)*500;templatemethod委托HookClass類(lèi)別之對(duì)象去處理客制化的部份:/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的子類(lèi)別:GraduateHook,并且讓Student的對(duì)象委托給GraduateHook子類(lèi)別之對(duì)象:/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類(lèi)別的templatemethod呼叫了HookClass抽象類(lèi)別的getValue()函數(shù),進(jìn)而反向呼叫到GraduateHook子類(lèi)別的getValue()函數(shù)。4.GoF的Observer樣式在GoF的一書(shū)里,其Observer樣式的架構(gòu)圖為:圖1Observer樣式GoF這里的Subject類(lèi)別就對(duì)應(yīng)到上述程序代碼的Student類(lèi)別。ConcreteSubject就對(duì)應(yīng)到Graduate_Student類(lèi)別。Observer類(lèi)別對(duì)應(yīng)到HookClass。ConcreteObserver對(duì)應(yīng)到GraduateHook類(lèi)別。5.Observer樣式又稱(chēng)為L(zhǎng)istener樣式上述的范例可改寫(xiě)為:/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畫(huà)面情境撰寫(xiě)程序建立Android程序項(xiàng)目:/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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026 年中職精細(xì)化工技術(shù)(精細(xì)化學(xué)品分析)試題及答案
- 辦公環(huán)境裝修合同協(xié)議2025年
- 外星生命探測(cè)
- 2025年河北省公需課學(xué)習(xí)-城市體檢評(píng)估制度
- 冰箱的課件教學(xué)課件
- 2025年預(yù)防艾滋病知識(shí)競(jìng)賽試題及答案(合集)
- 江蘇教編學(xué)科真題及答案
- 第七單元 微專(zhuān)題 圖形的折疊
- 海陸水循環(huán)考試題及答案
- 福清城投筆試真題及答案
- 杜國(guó)楹小罐茶的創(chuàng)業(yè)講稿
- 2025-2026學(xué)年統(tǒng)編版九年級(jí)歷史上冊(cè)(全冊(cè))知識(shí)點(diǎn)梳理歸納
- 滬教版(新版)一年級(jí)下學(xué)期數(shù)學(xué)第4單元100以?xún)?nèi)的加減法單元試卷(附答案)
- 放射科CT檢查注意事項(xiàng)
- 物流運(yùn)輸服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 產(chǎn)業(yè)園招商培訓(xùn)
- 2026年齊齊哈爾高等師范專(zhuān)科學(xué)校單招綜合素質(zhì)考試題庫(kù)必考題
- 2018版公路工程質(zhì)量檢驗(yàn)評(píng)定標(biāo)準(zhǔn)分項(xiàng)工程質(zhì)量檢驗(yàn)評(píng)定表路基土石方工程
- 導(dǎo)尿管相關(guān)尿路感染(CAUTI)防控最佳護(hù)理實(shí)踐專(zhuān)家共識(shí)解讀
- 2025年廣東深圳高中中考自主招生數(shù)學(xué)試卷試題(含答案詳解)
- SMETA員工公平職業(yè)發(fā)展管理程序-SEDEX驗(yàn)廠(chǎng)專(zhuān)用文件(可編輯)
評(píng)論
0/150
提交評(píng)論