Object Oriented Python 简明教程

Python Design Pattern

Overview

现代软件开发需要满足复杂业务需求。它还需要考虑以下因素,例如将来的可扩展性和可维护性。软件系统的好设计对于实现这些目标至关重要。设计模式在这样的系统中起着重要作用。

为了理解设计模式,让我们考虑以下示例 -

  1. 每辆汽车的设计都遵循基本设计模式,四个轮子,方向盘,核心驱动系统,例如加速器-断裂-离合器等。

因此,所有反复构建/生成的物品必然在其设计中遵循一种模式,比如汽车、自行车、比萨饼、ATM 机,甚至是你的沙发床。

几乎已成为编码软件中的某种逻辑/机制/技术标准的方法的设计,因此被称为或研究为软件设计模式。

Why is Design Pattern Important?

使用设计模式的好处如下−

  1. 通过久经考验的方法帮你解决常见的设计问题。

  2. 没有歧义的理解,因为它们有详细的文档。

  3. 缩短总体开发时间。

  4. 更轻松地处理未来的扩展和修改。

  5. 可以减少系统错误,因为它们是针对常见问题的久经考验的解决方案。

Classification of Design Patterns

GoF(四人帮)设计模式分为三类,即创建型、结构型和行为型。

Creational Patterns

创建型设计模式将对象创建逻辑与系统其他部分分离开来。创建型模式替代你创建对象,为你创建它们。创建型模式包括抽象工厂、生成器、工厂方法、原型和单例。

由于语言的动态特性,Python 中通常不使用创建型模式。此外,语言本身为我们提供了创建的所需灵活性,以足够优雅的方式,我们很少需要在顶层实现任何东西,如单例或工厂。

此外,这些模式提供了一种在隐藏创建逻辑的情况下创建对象的方式,而不是直接使用 new 运算符实例化对象。

Structural Patterns

有时,你不必从头开始,而是需要使用一组现有的类来构建更大的结构。这就是结构类模式使用继承来构建新结构的地方。结构对象模式使用组合/聚合来获得新功能。适配器、桥接、复合、装饰器、外观、享元和代理是结构模式。它们提供了组织类层次结构的最佳方式。

Behavioral Patterns

行为模式提供了处理对象之间通信的最佳方式。属于此类别的模式有:访问者、职责链、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略和模板方法是行为模式。

因为它们表示系统的行为,所以通常用于描述软件系统的功能。

Commonly used Design Patterns

Singleton

它是所有设计模式中最有争议和最著名的模式之一。它用于过度面向对象语言,并且是传统面向对象编程的重要组成部分。

单例模式用于:

  1. 当需要实现日志记录时。logger 实例由系统的各个组件共享。

  2. 配置文件正在使用它,因为需要对信息进行缓存,并由系统中的所有各个组件共享。

  3. 管理到数据库的连接。

以下是 UML 图表,

uml diagram
class Logger(object):
   def __new__(cls, *args, **kwargs):
      if not hasattr(cls, '_logger'):
      cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger

此示例中,Logger 为单例。

在调用 new 时,它会构造该类的某个新实例。当覆盖它时,我们首先检查我们的单例实例是否已创建。如果没有,我们使用超级调用创建它。因此,每当我们调用 Logger 上的构造函数时,我们始终会获得完全相同的实例。

>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>