外观模式的理解参考 http://c.biancheng.net/view/1369.html
外观模式类似门户,主要的目的是方便用户能“一点用全”。其实我们开发过程中,无形之中都会用到这个模式。
比如,我们维护日志文件时,代码结构可能会如下图设计,这其实就是外观模式:
如上图,如果我们新增加了子功能,比如是 压缩日志,这时候我们可能要更改 “维护日志” 这个类,这样就违背了开闭原则。作为解决方式,可以新增一个“门户类”。
试着写一下代码class DeleteLogUtil:
"""删除日志工具类"""
def del_log(self):
print("删除日志")
class FindLog:
"""查找日志工具类"""
def find_log(self):
print("查找日志工具类")
class BackupLogUtil:
"""
备份日志工具类
"""
def backup_log(self):
print("备份日志工具类")
# 门户类的抽象类
class baseFacade(metaclass=abc.ABCmeta):
@abc.abstractmethod
def help(self):
pass
class LogUtils(baseFacade):
def __init__(self, del_obj, find_obj, backup_obj):
self.__del_obj = del_obj
self.__find_obj = find_obj
self.__backup_obj = backup_obj
def help(self):
print("""
我们的功能有:
删除日志
备份日志
查找日志
""")
def del_log(self):
self.__del_obj.del_log()
def find_log(self):
self.__find_obj.find_log()
def back_log(self):
self.__backup_obj.backup_log()
加个抽象类,目的是起到约束的作用,约束多个门户类,相当于为多个门户定义了一个规范。不至于当类多了,出现方法名不一样但是功能一样的现象。



