日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android—设计模式原则及常见的设计模式

發(fā)布時(shí)間:2023/12/18 Android 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android—设计模式原则及常见的设计模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

設(shè)計(jì)模式六大原則:

單一職責(zé)原則:實(shí)現(xiàn)類要職責(zé)單一,類之間不相互影響。

里氏替換原則:不要破壞繼承體系,共享的父類方法應(yīng)該保持不變,不能被子類重新定義。我們應(yīng)該將父類定義為抽象類,并定義抽象方法。

依賴倒置原則:中心思想是面向接口編程。

接口隔離原則:在設(shè)計(jì)接口的時(shí)候要精簡單一,類間的依賴關(guān)系應(yīng)該建立在最小的接口上。

迪米特法則:要降低耦合。

開閉原則:總綱,其他五個(gè)設(shè)計(jì)原則都是開閉原則的具體形態(tài),類、模塊、方法等要對擴(kuò)展開放,對修改關(guān)閉。?

優(yōu)點(diǎn):提高代碼的復(fù)用性,可維護(hù)性。

設(shè)計(jì)模式:

創(chuàng)建型模式:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?單例模式
? ? ? ? ? ? ? ? ? ?建造者模式
? ? ? ? ? ? ? ? ? ?工廠方法模式
? ? ? ? ? ? ? ? ? ?原型模式
行為型模式
? ? ? ? ? ? ? ? ? ?策略模式
? ? ? ? ? ? ? ? ? ?責(zé)任鏈模式
? ? ? ? ? ? ? ? ? ?觀察者模式
結(jié)構(gòu)型模式
? ? ? ? ? ? ? ? ? ?代理模式
? ? ? ? ? ? ? ? ? ?裝飾者模式
? ? ? ? ? ? ? ? ? ?外觀模式

1.單例模式

這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時(shí)確保只有單個(gè)對象被創(chuàng)建。

這個(gè)類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實(shí)例化該類的對象。

Glide.with(this).load(bitmap).override(250,250).into(main_imagV)

實(shí)現(xiàn)方式有:懶漢式、餓漢式、靜態(tài)內(nèi)部類、雙重鎖檢查、枚舉等方式

單例模式的實(shí)現(xiàn)方式

?

2.建造者模式

把復(fù)雜對象的創(chuàng)建過程加以抽象,通過子類繼承或者重載的方式,動(dòng)態(tài)的創(chuàng)建具有復(fù)合屬性的對象。

方便用戶創(chuàng)建復(fù)雜的對象(不需要知道實(shí)現(xiàn)過程)代碼。

體現(xiàn)了復(fù)用性、封裝性

最明顯的標(biāo)志就是Build類,比如通知的構(gòu)建

NotificationCompat.Builder(this,"channel1").setContentTitle("測試通知1").setContentText("通知1來了,通知1來了,通知1來了").setSmallIcon(R.drawable.touxiang).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.b)).build()

3.原型模式

原型模式就是你想更快的獲取到一個(gè)相同屬性的對象,那么就可以使用原型模式。

在開源框架中可以看到,比如OkHttpClient中就存在著下面的方法。

/** Returns a shallow copy of this OkHttpClient. */@Override public OkHttpClient clone() {return new OkHttpClient(this);}

因?yàn)镺kHttpClient的構(gòu)造過程比較復(fù)雜,參數(shù)眾多,所以用這種方式來直接生成新對象,成本很低,而且能保留之前對象的參數(shù)設(shè)置。

4.工廠方法模式

定義:通過定義工廠父類負(fù)責(zé)定義創(chuàng)建對象的公共接口,而子類則負(fù)責(zé)生成具體的對象。

作用:將類的實(shí)例化(具體產(chǎn)品的創(chuàng)建)延遲到工廠類的子類(具體工廠)中完成,即由子類來決定應(yīng)該實(shí)例化(創(chuàng)建)哪一個(gè)類。

步驟1:?創(chuàng)建抽象工廠類,定義具體工廠的公共接口;?
步驟2:?創(chuàng)建抽象產(chǎn)品類?,定義具體產(chǎn)品的公共接口;?
步驟3:?創(chuàng)建具體產(chǎn)品類(繼承抽象產(chǎn)品類),定義生產(chǎn)的具體產(chǎn)品;?
步驟4: 創(chuàng)建具體工廠類(繼承抽象工廠類),定義創(chuàng)建對應(yīng)具體產(chǎn)品實(shí)例的方法;?
步驟5: 外界通過調(diào)用具體工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品類的實(shí)例

工廠模式是創(chuàng)建型模式 ,它關(guān)注對象創(chuàng)建,提供創(chuàng)建對象的接口,讓對象的創(chuàng)建與具體的使用客戶無關(guān)。

靜態(tài)工廠方法在Android中比較明顯的例子應(yīng)該就是BitmapFactory了,通過各種decodeXXX()就可以從不同渠道獲得Bitmap對象。

val bitmap = BitmapFactory.decodeStream(contentResolver.openInputStream(imageUri))

decodeStream主要處理來于網(wǎng)絡(luò)的圖片,decodeFile來于sd開內(nèi)的圖片,decodeResource來于資源文件里的圖片

5.策略模式

表示的是在遇到一種問題有多種解法的時(shí)候,我們可以根據(jù)環(huán)境或者條件的不同選擇不同的算法或者策略來完成該功能。

策略模式把對象本身和運(yùn)算規(guī)則區(qū)分開來,因此整個(gè)模式也分為三個(gè)部分。

環(huán)境類(Context):用來操作策略的上下文環(huán)境,也就是我們游客。

抽象策略類(Strategy):策略的抽象,出行方式的抽象

具體策略類(ConcreteStrategy):具體的策略實(shí)現(xiàn),每一種出行方式的具體實(shí)現(xiàn)。

策略模式是對象行為型模式 ,它關(guān)注行為和算法的封裝 。

6.責(zé)任鏈模式

避免請求的發(fā)送者和接收者之間的耦合關(guān)系。

將整個(gè)對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有一個(gè)對象處理它為止。

好處就是請求者不用知道到底是哪個(gè)對象處理的,反正提交請求就對了。

7.觀察者模式

Android中的觀察者模式應(yīng)該是用的非常頻繁的一種模式了

某個(gè)對象發(fā)生變化時(shí),立刻收到通知。

Android里面的各種監(jiān)聽器,也都屬于觀察者模式,比如觸摸、點(diǎn)擊、按鍵等,ContentProvider和廣播接收者也有觀察者模式的身影,還有l(wèi)iveData。

liveData.observe(LifecycleOwner,Observer{....})

8.模板方法模式

由抽象固定流程步驟,具體步驟交給子類進(jìn)行具體實(shí)現(xiàn)。

AsyncTask,各個(gè)方法之間的執(zhí)行符合流程,具體實(shí)現(xiàn)由我們完成。

9.代理模式

為某個(gè)對象提供一個(gè)代理對象,并且由代理對象控制對原對象的訪問。比如中介。有靜態(tài)代理和動(dòng)態(tài)代理。

靜態(tài)代理:定義接口,實(shí)現(xiàn)類,代理類,兩個(gè)類都實(shí)現(xiàn)接口,區(qū)別在于代理類內(nèi)部創(chuàng)建實(shí)現(xiàn)類對象,在接口方法中直接調(diào)用實(shí)現(xiàn)類實(shí)現(xiàn)的接口方法來實(shí)現(xiàn)。缺點(diǎn):每個(gè)實(shí)現(xiàn)類對應(yīng)一個(gè)代理類。

動(dòng)態(tài)代理:定義接口,實(shí)現(xiàn)類,代理類,實(shí)現(xiàn)類實(shí)現(xiàn)接口,代理類實(shí)現(xiàn)InvocationHandler,重寫invoke方法。用Proxy.newProxyInstance方法實(shí)現(xiàn)代理對象。

public class TaskProxy implements InvocationHandler {private Object taskProxy;public Object instance(Object taskImpl){this.taskProxy = taskImpl;return Proxy.newProxyInstance(taskImpl.getClass().getClassLoader(),taskImpl.getClass().getInterfaces(),this);}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {return method.invoke(taskProxy,args);} }

創(chuàng)建實(shí)例方法:?

Task task = (Task) new TaskProxy().instance(new Programmer());

優(yōu)點(diǎn):一個(gè)代理類對應(yīng)多個(gè)實(shí)現(xiàn)類,可以在invoke方法中進(jìn)行統(tǒng)一操作,又可以在各實(shí)現(xiàn)類中實(shí)現(xiàn)自己的操作。

10.裝飾器模式

通常的做法是將原始對象作為一個(gè)參數(shù)傳給裝飾者的構(gòu)造器

裝飾器模式和代理模式非常相似,裝飾器模式關(guān)注于在一個(gè)對象上動(dòng)態(tài)的添加方法,而代理模式關(guān)注于控制對對象的訪問。

11.外觀模式

提供一個(gè)統(tǒng)一的接口,用來訪問子系統(tǒng)中的一群接口,這樣能夠降低用戶的使用成本,也能夠?qū)τ脩羝帘魏芏鄬?shí)現(xiàn)細(xì)節(jié)。外觀模式也是我們封裝API的常用手段。

總結(jié)

以上是生活随笔為你收集整理的Android—设计模式原则及常见的设计模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。