门面模式

定义

提供一个更加高级的接口,用于便捷的调用复杂子系统的方式。

用途

将一组复杂的系统封装起来,能够让外界舒适的调用。

例如:某人去银行取钱,“取钱”对于用户来说就是一个简单的调用方式。
但是,对于银行职员,他就需要操作复杂的银行系统,完成一些列的操作,最终为用户提供“取钱”的服务。
在这一过程中,用户并不需要知道银行的系统是如何操作的,他只需要使用一个简单的业务接口,就可以间接调用银行的复杂系统,从而完成取钱操作。

示例:

1. 门面模式

通过对子系统的功能进行封装,最后向外仅提供一个简单明了的调用接口。

>>> class BankClient(object):
        def withdraw(self):
            print("请等待......")
            # 接入银行的系统,核对ID和密码,取钱记录等
            self.bankSystem = Bank()
            self.bankSystem.checkID()
            self.bankSystem.checkPassWord()
            self.bankSystem.withdraw()
            self.bankSystem.setRecord()
            # 取得现金
            self.CashDispenser = CashDispenser()
            self.CashDispenser.withdrawCash()
            # 验钞机验证数目
            self.MoneyDetector = = MoneyDetector()
            self.MoneyDetector.check()()
# 省略 Bank  CashDispenser  MoneyDetector
>>>  class You(object):
        def withdraw_money(self):
            print("找银行职员取钱")
            bankClient = BankClient()    
            bankClient.withdraw()
            print("成功取到钱!")
        
>>> you = You()
>>> You.withdraw_money()
找银行职员取钱
请等待......
成功取到钱!

对于银行来说,取钱这一方法涉及多个对象多个方法,并且按照规定流程执行,其子系统十分复杂。然而,对于用户来说,取钱仅仅只是调用bankClient.withdraw()方法,其中复杂的交互都是由门面BankClient来完成。