我学会了,外观模式

简介: 外观模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。

前言

外观模式属于结构型模式,这个类型的设计模式总结出了 类、对象组合后的经典结构,将类、对象的结构和使用解耦了,花式的去借用对象。

外观模式

使用场景:这个设计模式在日常生活中很常见,比如10086服务热线,这种设计模式将很多分开的功能进行了汇总,将细粒度的功能分别别类的进行了综合,你只需要通过简单的方式就能使用它。一般都在高层次的地方使用这种设计模式,因为综合之后就不太好拆分了,也许它综合的功能完全是你不喜欢的搭配。如果它综合的功能是你喜欢的搭配,你可以通过代理、适配等方式重组出新的功能来。

理解:类、对象的结构和使用解耦,通过这种汇总的方式,在应用层提供了很方便的功能,虽然缺点是它汇总的方式并不是你期望的,但是你可以参照它内部的实现方式自己再来重新汇总呀,照虎画豹子。

namespace struct_mode_07 {

    // 做饭接口
    interface ICook {
        // 洗碗、洗菜、做菜
        washVegetable(): string
        washDishes(): string
        cookAdish(): string
    }

    class Mom implements ICook {

        washVegetable(): string {
            return '妈妈洗碗'
        }
        washDishes(): string {
            return '妈妈洗菜'
        }
        cookAdish(): string {
            return '妈妈做菜'
        }
    }

    class Dad implements ICook {
        washVegetable(): string {
            return '爸爸洗碗'
        }
        washDishes(): string {
            return '爸爸洗菜'
        }
        cookAdish(): string {
            return '爸爸做菜'
        }
    }

    // 晚餐接口
    interface IDinner {
        cook(who: string): IDinner
    }

    // 外观类
    class DinnerFacade implements IDinner {

        private mom = new Mom()
        private dad = new Dad()

        cook(who: string): IDinner {
            console.log('制作晚餐中...')

            if (who === 'mom') {
                this.cookMom()
            } else if (who === 'dad') {
                this.cookDad()
            } else if (who === 'dad mom') {
                this.cookDadMom()
            } else {
                console.log('无人制作晚餐,请到外面饭店就餐')
                return this
            }
            
            console.log('制作晚餐完毕...')

            return this
        }

        private cookMom(): void {

            console.log(this.mom.washVegetable())
            console.log(this.mom.washDishes())
            console.log(this.mom.cookAdish())

        }

        private cookDad(): void {

            console.log(this.dad.washVegetable())
            console.log(this.dad.washDishes())
            console.log(this.dad.cookAdish())

        }

        private cookDadMom(): void {

            console.log(this.dad.washVegetable())
            console.log(this.dad.washDishes())
            console.log(this.mom.cookAdish())

        }
    }

    // 使用
    new DinnerFacade().cook('mom').cook('dad').cook('dad mom').cook('')
}
目录
相关文章
MindOpt APL 达摩院自己的建模语言!
MindOpt建模语言(MindOpt Algebraic Programming Language, MindOpt APL, 简称为MAPL)是MindOpt团队研发的一种代数建模语言。相比与其他的语言,MAPL语法相对较少且自然,很贴近数学语言。用MAPL描述数学规划模型与用数学公式进行描述非常类似。
MindOpt APL 达摩院自己的建模语言!
|
分布式计算 Hadoop 关系型数据库
Sqoop入门(一篇就够了)(下)
Sqoop入门(一篇就够了)(下)
223 0
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
1857 0
十进制与二进制、八进制、十六进制之间的互相转换,本文让你全部理清
|
5月前
|
JSON JavaScript 前端开发
gRPC技术中的gRPC到HTTP的转换
从上述内容,我们可以看到,gRPC到HTTP的转换并没有改变gRPC强大的性能和可扩展性。它只是让这些强大的功能能更好地适应不同的环境和需求,兼容了更广泛的网络设施。所以,技术总是在变化,并且始终在寻找更好的平衡点,以满足不断变化的业务需求。我们也应该持续学习,掌握这些新的变化,以便更好地解决实际问题。
158 11
|
9月前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
305 8
|
10月前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
99 1
|
Python
Sublime Text Python 代码提示插件 Anaconda
Sublime Text Python 代码提示插件 Anaconda
270 1
|
安全 Java fastjson
JVM 配置参数 -D,-X,-XX 的区别
JVM 配置参数 -D,-X,-XX 的区别
208 2
|
数据采集 机器学习/深度学习 数据可视化
关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理,进行数据探索,选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。
【7月更文挑战第5天】这是一个关于Python数据分析项目的简要概述:从CSV加载数据,执行数据预处理(填充缺失值,处理异常值),进行数据探索(可视化和统计分析),选择线性回归模型进行训练,评估模型性能并优化,最后结果解释与可视化。此案例展示了数据科学的典型流程。
210 2
|
缓存
如何彻底卸载VSCode及其原来的插件配置缓存
如何彻底卸载VSCode及其原来的插件配置缓存
1375 0