Android設(shè)計模式:橋接模式

定義

將抽象部分和實現(xiàn)部分分離,使它們都可以獨立地變化。

簡介

  • 橋接模式屬于結(jié)構(gòu)性模式
  • 通俗的表達(dá):舉個例子,一條數(shù)據(jù)線,一頭USB接口的可以連接電腦、充電寶等等,另一頭可以連接不同品牌的手機(jī),通過這條數(shù)據(jù)線,兩頭不同的東西就可以連接起來,這就是橋接模式。

代碼實例

背景:不同職業(yè)的人(Person),他們的穿衣(Clothes)需求不同。比如,學(xué)生(Student)會穿校服(Uniform)和襯衫(Shirt),程序員會穿襯衫……

package 設(shè)計模式4

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
/**
 * 創(chuàng)建實現(xiàn)化角色
 * 定義接口:穿衣服
 */
interface Clothes{
    fun getName():String
}
/**
 * 創(chuàng)建具體實現(xiàn)化角色
 */

class Uniform:Clothes{
    override fun getName(): String {
        return "校服"
    }
}

class Shirt:Clothes{
    override fun getName(): String {
        return "襯衫"
    }
}
/**
 * 創(chuàng)建一個人物類,有一個穿衣服的方法,并且持有衣服類的引用。
 * 也就是抽象化角色持有實例化角色的引用,可以調(diào)用實例化角色的方法,達(dá)到橋接的作用。
 */
abstract class Person(){
    lateinit var mClothes:Clothes //持有衣服類的引用
    fun setClothes(clothes: Clothes){
        mClothes = clothes
    }

    abstract fun dress()//穿衣服
}

/**
 * 創(chuàng)建具體抽象化角色
 */
class Student:Person(){
    override fun dress() {
        println("學(xué)生穿上"+mClothes.getName() )
    }
}
class Coder:Person(){
    override fun dress() {
        println("程序員穿上"+mClothes.getName() )
    }
}

/**
 * 測試
 */
fun main() {
    //創(chuàng)建不同的衣服對象
    val uniform:Clothes = Uniform()
    val shirt:Clothes = Shirt()
    //不同職業(yè)的人穿衣服
    val code:Person = Coder()
    code.setClothes(shirt)
    code.dress()
    println("-------------------")
    val student:Student = Student()
    student.setClothes(uniform)
    student.dress()
    println("-------------------")
    student.setClothes(shirt)
    student.dress()
}

運行結(jié)果:

測試結(jié)果

優(yōu)點

  • 分離了抽象與實現(xiàn)。讓抽象部分和實現(xiàn)部分分離開,分別定義接口,這有助于對系統(tǒng)進(jìn)行分層,從而產(chǎn)生更好的結(jié)構(gòu)化的系統(tǒng)。
  • 良好的擴(kuò)展性。抽象部分和實現(xiàn)部分都可以分別獨立擴(kuò)展,而不相影響。

缺點

  • 增加了系統(tǒng)的復(fù)雜性。
  • 不容易設(shè)計。抽象與現(xiàn)實的分離要設(shè)計的好比較有難度。

應(yīng)用場景

在Android的系統(tǒng)中,AbsListView跟ListAdapter之間就是使用的橋接模式。
Window和WindowManager之間也使用了橋接模式。

  • 一個類存在兩個或以上的獨立維度的變化,且這些維度都需要進(jìn)行擴(kuò)展。
  • 不希望使用繼承或多層次繼承導(dǎo)致類的個數(shù)急劇增加時。
  • 如果一個系統(tǒng)需要在構(gòu)建的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承關(guān)系,可以通過橋接模式使它們在首相層建立一個關(guān)聯(lián)關(guān)系。

參考文章:
Android設(shè)計模式-橋接模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容