12.外观模式(大话设计模式kotlin版)

外观模式

定义

**外观模式(Facade)**:为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得子系统更加容易使用,方便外层调用。(提供一个接口对子系统一系列操作进行封装,以便外层调用)它体现了依赖倒置原则迪米特法则的思想。

UML图

12.外观模式(大话设计模式kotlin版)_第1张图片

基本实现代码

Facde:外观类

/**
 * @create on 2020/8/23 17:42
 * @description 外观类,它需要了解所有的子系统的方法和属性,进行组合,以备外界调用
 * @author mrdonkey
 */
class Facade {

    private var one: SubSystem1 = SubSystem1()
    private var two: SubSystem2 = SubSystem2()
    private var three: SubSystem3 = SubSystem3()

    /**
     * 组合的方法
     */
    fun methodA() {
        one.method1()
    }

    /**
     * 组合的方法
     */
    fun methodB() {
        two.method2()
        three.method3()
    }
}

SubSystem1:子系统1

/**
 * @create on 2020/8/23 17:41
 * @description 子系统1
 * @author mrdonkey
 */
class SubSystem1 {

    fun method1(){
        println("--->子系统1的方法")
    }
}

其他两个系统与子系统1一致,代码省略。

Client:客户端

class Client {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val facade = Facade()//facade作用:客户端可以在根本不知道三个子系统的存在
            facade.methodA()//对子系统的方法进行整合,方便外部调用
            facade.methodB()
        }
    }
}

外观模式的使用场景

  • 设计初期阶段,应该有意识的将不同的两个层分离,比如经典三层架构,就需要考虑在数据访问层和业务逻辑层、业务逻辑层与表示层的层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,降低耦合性。
  • 开发阶段,子系统往往因为不断的重构和演化而变得越来越复杂,利用外观模式将复杂的逻辑进行整合成一个接口Facade,供外部调用。
  • 在维护一个遗留的大型系统时,系统以及难以维护或拓展,但是新系统又需要依赖它,可以利用外观模式Facade,来提供一个简单的接口与遗留代码交互所有复杂的工作,便于给外部调用简洁提供。

你可能感兴趣的:(设计模式)