门面方法 - Python设计模式
外观方法是一种结构设计模式,它为更复杂的系统提供更简单的统一接口。 Facade这个词意味着建筑物的表面,或者特别是复杂系统的外部界面,由几个子系统组成。它是四人组设计模式的重要组成部分。通过提供单一入口点,它提供了一种更简单的方式来访问底层系统的方法。
在这里,我们创建了一个 Facade 层,它有助于与子系统轻松地与客户端进行通信。
不使用外观方法的问题
想象一下,我们有一台洗衣机,它可以洗衣服、漂洗衣服和旋转衣服,但所有任务都是分开的。由于整个系统相当复杂,我们需要将子系统的复杂性抽象出来。我们需要一个可以自动完成整个任务而不受我们干扰或干扰的系统。
使用 Facade 方法的解决方案
为了解决上述问题,我们想采用 Facade Method。它将帮助我们隐藏或抽象子系统的复杂性,如下所示。
以下代码是使用 Facade Method 编写的
Python3
"""Facade pattern with an example of WashingMachine"""
class Washing:
'''Subsystem # 1'''
def wash(self):
print("Washing...")
class Rinsing:
'''Subsystem # 2'''
def rinse(self):
print("Rinsing...")
class Spinning:
'''Subsystem # 3'''
def spin(self):
print("Spinning...")
class WashingMachine:
'''Facade'''
def __init__(self):
self.washing = Washing()
self.rinsing = Rinsing()
self.spinning = Spinning()
def startWashing(self):
self.washing.wash()
self.rinsing.rinse()
self.spinning.spin()
""" main method """
if __name__ == "__main__":
washingMachine = WashingMachine()
washingMachine.startWashing()
Facade 方法的类图
下面是 Facade Method 的类图:
好处
- 隔离:我们可以轻松地将代码与子系统的复杂性隔离开来。
- Testine Process:使用Facade Method使测试过程相对容易,因为它为常见的测试任务提供了方便的方法。
- 松散耦合:客户端和子系统之间松散耦合的可用性。
缺点
- 方法的变化:众所周知,在Facade 方法中,后续方法是附加到 Facade 层的,后续方法的任何变化都可能带来 Facade 层的变化,这是不利的。
- 昂贵的过程:在外部应用中建立Facade方法对于系统的可靠性来说并不便宜。
- 违反规则:总有违反立面层施工的恐惧。
适用性
- 提供简单的接口: Facade Method最重要的应用之一是当你想为复杂的子系统提供简单的接口时使用它
- 分层:当我们想通过将子系统分层来为子系统提供独特的结构时使用它。它还导致客户端和子系统之间的松散耦合。
进一步阅读 – Java中的外观方法