Kotlin~Facade

概念

又称门面模式,为复杂系统提供简单交互接口。

角色介绍

  • Facade:外观类,供客户端调用,将请求委派给响应的子系统。
  • SubSystem:子系统,独立的子设备或子类

UML

代码实现

kt 复制代码
class Light(val name: String) {
    fun turnOn() {
        println("${name}灯打开")
    }

    fun turnOff() {
        println("${name}灯关闭")
    }
}

class TV {
    fun power(boolean: Boolean) {
        println("电视电源${boolean}")
    }
}

class AirConditioner {
    fun open() {
        println("空调打开")
    }

    fun sleep() {
        println("空调睡眠")
    }

    fun close() {
        println("空调关闭")
    }
}
class SmartSceneFacade {
    private val lights = arrayListOf<Light>(Light("客厅"), Light("卧室"))
    private val tv = TV()

    private val airConditioner = AirConditioner()


    fun goHome() {
        println("回家场景:")
        lights[0].turnOn()
        airConditioner.open()
    }

    fun goToWork() {
        println("去上班:")
        for (light in lights) {
            light.turnOff()
        }
        tv.power(false)
        airConditioner.close()
    }

    fun nightSleep() {
        println("要睡觉了:")
        for (light in lights) {
            light.turnOff()
        }
        tv.power(false)
        airConditioner.sleep()
    }
}

fun main() {
    val smartSceneFacade = SmartSceneFacade()
    smartSceneFacade.goToWork()
    smartSceneFacade.goHome()
    smartSceneFacade.nightSleep()
}

优缺点

优点

  • 简化交互方式
  • 解耦合
  • 提高可维护性

缺点

  • 不合符开闭原则
  • 隐藏潜在问题

应用场景

子系统接口复杂,需要将子系统划分为多个层次,解偶客户端与子系统

  • 复杂的lib
  • 扩平台的程序
  • 电商系统

总结

外观模式相当于在子类上又包了一层,是迪米特法则的典型应用。

相关推荐
Kapaseker4 小时前
Compose 响应式布局的最后一块拼图—Grid
android·kotlin
我命由我123454 小时前
Android buildSrc 模块问题:Gradle 的类 DefaultProject 被错误地尝试转换成 Apache Ant 的 Project 类
android·java·java-ee·kotlin·android jetpack·android-studio·android runtime
雨白15 小时前
深入理解 Kotlin 协程 (四):大道至简,于微末的挂起恢复中衍化万物
kotlin
jinanwuhuaguo1 天前
OpenClaw 2026年4月升级大系深度解读剖析:从“架构重塑”到“信任内建”的范式跃迁
android·开发语言·人工智能·架构·kotlin·openclaw
我命由我123451 天前
Android Jetpack Compose - SearchBar(搜索栏)、Tab(标签页)、时间选择器、TooltipBox(工具提示)
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Lsk_Smion1 天前
Hot100(开刷) 之 长度最小的数组--删除倒数第N个链表--层序遍历
java·数据结构·算法·kotlin
我命由我123451 天前
Android Jetpack Compose - 组件分类:布局组件、交互组件、文本组件
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Kapaseker1 天前
让你的 App 成为 AI 的一环
android·kotlin
千码君20162 天前
kotlin:Jetpack Compose 给APP添加声音(点击音效/背景音乐)
android·开发语言·kotlin·音效·jetpack compose
Kapaseker2 天前
lazy 与 lateinit 到底有什么区别?
android·kotlin