1.單一職責(zé) (一個class完成一件事)

按需求定制制作可以根據(jù)自己的需求進行定制,成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)構(gòu)思過程中功能建設(shè)理應(yīng)排到主要部位公司成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)的運用實際效果公司網(wǎng)站制作網(wǎng)站建立與制做的實際意義
2.開閉原則(繼承)
3.依賴倒置原則(接口)
4.接口隔離原則(多個接口通訊)
4.里氏替換原則
5.迪米特原則(最小支持原則)
又稱 FlyWeight,代表輕量級的意思,結(jié)構(gòu)型設(shè)計模式。
享元模式是對象池的一種實現(xiàn)。類似于線程池,線程池可以避免不停的創(chuàng)建和銷毀多個對象,消耗性能。享元模式也是為了減少內(nèi)存的使用,避免出現(xiàn)大量重復(fù)的創(chuàng)建銷毀對象的場景。
享元模式用在一批相同或相似的對象上,這些對象有可以共享的內(nèi)部狀態(tài)和各自不同的外部狀態(tài)。
享元模式中會有一個工廠,工廠維護著一個容器,容器以鍵值對的方式存儲,鍵是對象的內(nèi)部狀態(tài),也就是共享的部分,值就是對象本身。客戶端從這個工廠獲取對象,如果容器中存在這個對象就直接返回,不存在再創(chuàng)建新的對象并存入容器,避免了大量重復(fù)創(chuàng)建對象。
使用共享對象有效的支持大量的細(xì)粒度對象的復(fù)用。
系統(tǒng)中存在大量的 相似對象。
細(xì)粒度的對象都具備較接近的外部狀態(tài),且內(nèi)部狀態(tài)與環(huán)境無關(guān),即對象沒有特定身份。
需要 緩沖池 的場景。
例1. 過年回家買火車票,無數(shù)人在客戶端上訂票 (有多次購票、刷票的情況),即不斷向服務(wù)端發(fā)送請求。
而每次查詢,服務(wù)器必須做出回應(yīng),具體地,用戶查詢輸入出發(fā)地和目的地,查詢結(jié)構(gòu)返回值只有一趟列車的車票。而數(shù)以萬計的人有同樣需求,即不間斷請求數(shù)據(jù),每次重新創(chuàng)建一個查詢的車票結(jié)果,即造成大量重復(fù)對象創(chuàng)建、銷毀,使得服務(wù)器壓力加重。
享元模式正好適合解決該情形的問題,例如 A 到 B 地的車輛是有限的,車上鋪位分硬臥、軟臥和坐票三種,將這些可公用的對象緩存起來。用戶查詢時優(yōu)先使用緩存,反之則重新創(chuàng)建。
我們知道 Java 中 String 是存在于常量池中,即一個 String 被定義之后它就被緩存到了常量池中,當(dāng)其他地方使用同樣的字符串,則直接使用緩存,而非創(chuàng)建。
享元模式的優(yōu)缺點
優(yōu)點 - 大幅度地降低內(nèi)存中對象的數(shù)量。
缺點-1) 為了使對象可共享,需將一些狀態(tài)外部化,使程序的邏輯復(fù)雜化
狀態(tài)模式中的行為是由狀態(tài)來決定的,不同的狀態(tài)下有不同的行為。 狀態(tài)模式和策略模式的結(jié)構(gòu)幾乎完全一樣,但他們的目的、本質(zhì)卻完全不同。狀態(tài)模式的行為是平行的、不可替換的,策略模式的行為是彼此獨立、可相互替換的。 用一句話來表述,狀態(tài)模式把對象的行為包裝在不同的狀態(tài)對象里,每一個狀態(tài)對象都有一個共同的抽象狀態(tài)基類。狀態(tài)模式的意圖是讓一個對象在其內(nèi)部改變的時候,其行為也隨之改變。
當(dāng)一個對象的內(nèi)在狀態(tài)改變時允許改變其行為,這個對象看起來像是改變了其類。
下面我們就以電視遙控器為例來演示一下狀態(tài)模式的實現(xiàn)。我們首先將電視的狀態(tài)簡單分為開機狀態(tài)和關(guān)機狀態(tài),在開機狀態(tài)下可以通過遙控器進行頻道切換、調(diào)整音量等操作,但是,此時重復(fù)按開機鍵是無效的;而在關(guān)機狀態(tài)下,頻道切換、調(diào)整音量、關(guān)機都是無效的操作,只有按開機按鈕時會生效。也就是說電視的內(nèi)部狀態(tài)決定了遙控器的行為。
上述實現(xiàn)中,我們抽象了一個TvState接口,該接口中有操作電視的所有函數(shù),該接口有兩個實現(xiàn)類,即開機狀態(tài)(PowerOnState)和關(guān)機狀態(tài)(PowerOffState)。開機狀態(tài)下只有開機功能是無效的,也就是說在已經(jīng)開機的時候用戶再按開機鍵不會產(chǎn)生任何反應(yīng);而在關(guān)機狀態(tài)下,只有開機功能是可用的,其他功能都不會生效。同一個操作,如調(diào)高音量的turnUp函數(shù),在關(guān)機狀態(tài)下無效,在開機狀態(tài)下就會將電視的音量調(diào)高,也就是說電視的內(nèi)部狀態(tài)影響了電視遙控器的行為。狀態(tài)模式將這些行為封裝到狀態(tài)類中,在進行操作時將這些功能轉(zhuǎn)發(fā)給狀態(tài)對象,不同的狀態(tài)有不同的實現(xiàn),這樣就通過多態(tài)的形式去除了重復(fù)、雜亂的if-else語句,這也正是狀態(tài)模式的精髓所在。
狀態(tài)模式的關(guān)鍵點在于不同的狀態(tài)下對于同一行為有不同的響應(yīng),這其實就是一個將if-else用多態(tài)來實現(xiàn)的一個具體示例。在if-else或者switch-case形式下根據(jù)不同的狀態(tài)進行判斷,如果是狀態(tài)A那么執(zhí)行方法A、狀態(tài)B執(zhí)行方法B,但這種實現(xiàn)使得邏輯耦合在一起,易于出錯,通過狀態(tài)模式能夠很好地消除這類“丑陋”的邏輯處理,當(dāng)然并不是任何出現(xiàn)if-else的地方都應(yīng)該通過狀態(tài)模式重構(gòu),模式的運用一定要考慮所處的情景以及你要解決的問題,只有符合特定的場景才建議使用對應(yīng)的模式。
裝飾器模式:動態(tài)地給一個對象添加額外的職責(zé)。
背景:某果園在采摘完水果之后要將其打包,通過顧客反饋需要在原有的包裝上做其他的處理,比如防偽、加固、加急。
測試結(jié)果
參考文章:
Android設(shè)計模式-裝飾者模式
本文標(biāo)題:android與設(shè)計模式,android設(shè)計模式的應(yīng)用場景
網(wǎng)站網(wǎng)址:http://chinadenli.net/article45/dsiipei.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、微信公眾號、全網(wǎng)營銷推廣、企業(yè)網(wǎng)站制作、軟件開發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)