收藏设计模式

Android设计模式:桥接模式

2021-11-03  本文已影响0人  搬码人

定义

将抽象部分和实现部分分离,使它们都可以独立地变化。

简介

代码实例

背景:不同职业的人(Person),他们的穿衣(Clothes)需求不同。比如,学生(Student)会穿校服(Uniform)和衬衫(Shirt),程序员会穿衬衫……

package 设计模式4

/**
 *@Description
 *@Author PC
 *@QQ 1578684787
 */
/**
 * 创建实现化角色
 * 定义接口:穿衣服
 */
interface Clothes{
    fun getName():String
}
/**
 * 创建具体实现化角色
 */

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

class Shirt:Clothes{
    override fun getName(): String {
        return "衬衫"
    }
}
/**
 * 创建一个人物类,有一个穿衣服的方法,并且持有衣服类的引用。
 * 也就是抽象化角色持有实例化角色的引用,可以调用实例化角色的方法,达到桥接的作用。
 */
abstract class Person(){
    lateinit var mClothes:Clothes //持有衣服类的引用
    fun setClothes(clothes: Clothes){
        mClothes = clothes
    }

    abstract fun dress()//穿衣服
}

/**
 * 创建具体抽象化角色
 */
class Student:Person(){
    override fun dress() {
        println("学生穿上"+mClothes.getName() )
    }
}
class Coder:Person(){
    override fun dress() {
        println("程序员穿上"+mClothes.getName() )
    }
}

/**
 * 测试
 */
fun main() {
    //创建不同的衣服对象
    val uniform:Clothes = Uniform()
    val shirt:Clothes = Shirt()
    //不同职业的人穿衣服
    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()
}

运行结果:

测试结果

优点

缺点

应用场景

在Android的系统中,AbsListView跟ListAdapter之间就是使用的桥接模式。
Window和WindowManager之间也使用了桥接模式。

参考文章:
Android设计模式-桥接模式

上一篇下一篇

猜你喜欢

热点阅读