外观模式(FacadePattern)定义“为子系统中的一组接口提供一个统一的接口。Facade定义了一个更高级的接口,使子系统更容易使用。(需要一个子系统外部与其内部的通信必须通过一个统一的对象来进行。外观模式提供了一个高层接口,使子系统更易于使用。)”摘自:秦晓波。《设计模式之禅(下)(华章原创精品)》。分析一下这个定义:外观模式可以理解为对外部客户端和内部交互的统一接口的封装,我们经常看到一些库文档,有的有高层接口,就是对子系统,让调用更简单。这样做有什么好处,什么时候考虑使用?开发前期设计阶段:项目分工明确,各层之间有外观层可以封装在项目开发中期,随着项目越来越复杂,产生的子系统越来越多,子类也越来越多。此时引入外观模式,提供简单的界面,减少对项目维护阶段的依赖,项目可能会越来越复杂,导致client与多个子系统交互。这时候可以写外观界面层,统一界面,然后再进行内部的改动。当外观接口过多时,可以单独实现多个外观接口,针对不同的访问权限设计不同的外观接口。例如,管理员可以访问的外观界面可能与普通用户不同。这时候封装了一层简单的封装。接口的外观足以保证安全。不参与外观界面中子界面的逻辑功能。@startuml@enduml代码实现示例:操作系统封装了内存管理、文件系统管理、进程管理等模块的服务。此时,反映给用户的只是操作系统的界面方面。我们通过代码实现下面的例子~fromabcimportABCMeta,abstractmethodclassServer(metaclass=ABCMeta):@abstractmethoddef__init__(self):super().__init__()@abstractmethoddefboot(self):pass@abstractmethoddefkill(self):passclassFileServer(Server):def__init__(self):super().__init__()defboot(self):打印('{}:{}'.format('FileServer','boot'))defkill(self):print('{}:{}'.format('FileServer','kill'))defcreate_file(self,user,name):print('user:{},name:{}'.format(user,name))classProcessServer(Server):def__init__(self):super().__init__()defboot(self):print('{}:{}'.format('ProcessServer','boot'))defkill(self):print('{}:{}'.format('ProcessServer','kill'))defcreate_process(self,user,name):print('user:{},name:{}'.format(user,name))classOperationSystem():def__init__(self):self.fs=FileServer()self.ps=ProcessServer()super().__init__()defstart(self):[i.boot()foriin(self.fs,self.ps)]defcreate_file(self,user,name):returnself.fs.create_file(user,name)defcreate_process(self,user,name):returnself.ps.create_process(user,name)如果__name__=="__main__":oper=OperationSystem()oper.start()oper.create_file('root','abc.txt')oper.create_process('root','windows')'''打印:FileServer:bootProcessServer:bootuser:root,name:abc.txtuser:root,name:windows'''知识点需要了解appearance模式的应用场景,应该经常用到,但是我们可能没注意,或者设计一个接口层理解Metaclass元类,类创建类参考链接:>https://www.cnblogs.com/Simon...https://www.liaoxuefeng.com/wiki/1016959663602400/1017592449371072下集预告享元模型
