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
  • 扩平台的程序
  • 电商系统

总结

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

相关推荐
天下无敌笨笨熊30 分钟前
kotlin函数式编程
开发语言·数据库·kotlin
QING6182 小时前
Kotlin Flow 去重 (distinctUntilChanged) 详解
kotlin·android studio·android jetpack
QING6182 小时前
Kotlin Flow 节流 (Throttle) 详解
android·kotlin·android jetpack
Kapaseker3 小时前
Context 知多少,组件通联有门道
android·kotlin
儿歌八万首1 天前
Jetpack Compose 实战:打造高性能轮播图 (Carousel) 组件
android·前端·kotlin
QING6181 天前
Kotlin Flow 防抖(Debounce)详解
android·kotlin·android jetpack
QING6181 天前
Kotlin Flow 防抖(Debounce)、节流(Throttle)、去重(distinctUntilChanged) —— 新手指南
android·kotlin·android jetpack
aqi001 天前
FFmpeg开发笔记(九十四)基于Kotlin的国产开源推拉流框架anyRTC
android·ffmpeg·kotlin·音视频·直播·流媒体
darryrzhong2 天前
GalleryPicker:一个基于 Android 官方 Photo Picker API 封装的现代图片/视频选择库
android·kotlin·github·相机