跟我一起学“仓颉”设计模式-外观模式
·
一、外观模式
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(结构型)。
外观模式的角色:
- 抽象外观角色:在客户端可以调用它的方法;
- 具体外观角色:实现抽象外观里面的抽象方法;
- 子系统角色:一个软件系统里有多个子系统角色,每个子系统不仅可以是一个类,还可以是类的集合,每个子系统都不允许被客户端调用。
二、实现
在src目录下,新建一个facade文件夹,在该文件夹下新建一个facade.cj文件和facade.drawio文件。
类图

核心代码
package DesignPattern.facade
// 抽象外观类
public abstract class AbstractEncrypt {
public func fileEncrypt(fileSrc: String, fileDesc: String): Unit
}
// 外观类
public class Encrypt <: AbstractEncrypt {
private let fileReader: FileReader
private let cipherMachine: CipherMachine
private let fileWriter: FileWriter
public init() {
this.fileReader = FileReader()
this.cipherMachine = CipherMachine()
this.fileWriter = FileWriter()
}
public override func fileEncrypt(fileSrc: String, fileDesc: String) {
let read = this.fileReader.read(fileSrc)
let encrypt = this.cipherMachine.encrypt(read)
this.fileWriter.writer(encrypt, fileDesc)
}
}
// 子系统
private class FileReader {
public func read(fileSrc: String): String {
println("从${fileSrc}明文读取文件...")
return "123456"
}
}
private class CipherMachine {
public func encrypt(data: String): String {
println("明文数据: ${data}")
println("数据加密中...")
println("加密完成")
return "******"
}
}
private class FileWriter {
public func writer(data: String, fileDesc: String) {
println("加密数据${data}保存文件到${fileDesc}")
}
}
测试代码
package DesignPattern
import DesignPattern.facade.*
main(): Int64 {
let encrypt = Encrypt()
encrypt.fileEncrypt("./src/demo.txt", "./src/demo_encrypt.txt")
return 0
}
三、优缺点
优点:
- 对客户端隐藏了子系统,使得客户端的代码变得简单;
- 实现子系统与客户端之间的解耦,使得子系统的变化不会影响到调用它的客户端;
- 一个子系统的修改,不会影响其他子系统。
缺点:
- 不能很好的限制客户使用子系统类,如果客户端访问子系统类做了太多限制,会灵活性和可变性;
- 如果设计不得当,可能会修改外观类的代码,违背开闭原则。
四、适用环境
- 当要为访问一系列复杂的子系统提供一个简单的入口时,可以使用外观模式;
- 客户端与多个子系统存在很大依赖时,可以用外观模式进行解耦。
五、小结
本章为大家详细的介绍了仓颉设计模式中外观模式的内容,下一章,为大家带来外观模式练习题的内容。最后,创作不易,如果大家觉得我的文章对学习仓颉设计模式有帮助的话,就动动小手,点个免费的赞吧!收到的赞越多,我的创作动力也会越大哦,谢谢大家🌹🌹🌹!!!
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)