📜  外观设计模式 |介绍(1)

📅  最后修改于: 2023-12-03 14:51:40.068000             🧑  作者: Mango

外观设计模式 | 介绍

外观设计模式(Facade design pattern)也叫门面模式,是一种结构型设计模式。它的作用是为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

示例

外观模式实现可以通过对外暴露一个简单的接口,并对内部复杂的实现进行封装。

以下是一个简单的示例:

class SubSystem1:

    def operation1(self) -> str:
        return "Subsystem 1: Ready!"

class SubSystem2:

    def operation2(self) -> str:
        return "Subsystem 2: Go!"

class Facade:
    
    def __init__(self) -> None:
        self._subsystem1 = SubSystem1()
        self._subsystem2 = SubSystem2()

    def operation(self) -> str:
        results = []
        results.append("Facade initializes subsystems:")
        results.append(self._subsystem1.operation1())
        results.append(self._subsystem2.operation2())
        return "\n".join(results)

def client_code(facade: Facade) -> None:
    print(facade.operation())

if __name__ == "__main__":
    facade = Facade()
    client_code(facade)

Output:

Facade initializes subsystems:
Subsystem 1: Ready!
Subsystem 2: Go!

在这个示例中,Facade 充当了门面的角色,对内部的 SubSystem1SubSystem2 进行了封装,并对外提供了一个简单的接口 operation。客户端可以通过调用 operation 来使用 SubSystem1SubSystem2 的功能,而不用了解内部的实现细节。

优点
  • 减少系统的相互依赖。
  • 提高了灵活性,不需要修改子系统就能够实现新的功能。
  • 提高安全性,隐藏了子系统的细节,降低了客户端错误的风险。
缺点
  • 如果设计不当,增加外观可能会导致系统过于臃肿,降低了系统的性能。
  • 不遵循开闭原则,增加新的子系统需要修改门面。
适用场景
  • 当需要简化复杂的子系统和减少相互依赖关系时。
  • 当需要定义一个高层接口来统一子系统时。
总结

作为一种常用的设计模式,外观模式在实际开发中也有广泛的应用。通过对复杂子系统的封装,可以提高系统的灵活性、安全性和可维护性,但在应用时需要注意设计,避免出现臃肿的门面和违反开闭原则等问题。