Python设计模式



概述

现代软件开发需要解决复杂的业务需求。它还需要考虑诸如未来的可扩展性和可维护性等因素。良好的软件系统设计对于实现这些目标至关重要。设计模式在这样的系统中发挥着重要的作用。

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

  • 每辆汽车的设计都遵循基本的设计模式:四个轮子、方向盘、核心驱动系统(如加速器-制动器-离合器)等等。

所以,所有重复构建/生产的东西,不可避免地在设计中遵循某种模式……无论是汽车、自行车、披萨、自动取款机,还是任何东西……甚至你的沙发床。

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

为什么设计模式很重要?

使用设计模式的好处包括:

  • 通过行之有效的方法帮助您解决常见的设计问题。

  • 由于它们有良好的文档记录,因此理解上没有歧义。

  • 减少整体开发时间。

  • 帮助您比以往更容易地处理未来的扩展和修改。

  • 由于它们是针对常见问题的行之有效的解决方案,因此可以减少系统中的错误。

设计模式的分类

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

创建型模式

创建型设计模式将对象创建逻辑与系统的其余部分分离。创建型模式为您创建对象,而不是您自己创建对象。创建型模式包括抽象工厂、建造者、工厂方法、原型和单例。

由于语言的动态特性,创建型模式在Python中并不常用。而且语言本身提供了我们创建足够优雅方式所需的所有灵活性,我们很少需要在其之上实现任何东西,例如单例或工厂。

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

结构型模式

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

行为型模式

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

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

常用的设计模式

单例模式

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

单例模式用于:

  • 实现日志记录时。日志记录器实例由系统的全部组件共享。

  • 配置文件使用它,因为需要维护信息缓存并由系统中的所有各种组件共享。

  • 管理数据库连接。

这是一个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__`时,它通常会构造该类的新的实例。当我们重写它时,我们首先检查我们的单例实例是否已经被创建。如果没有,我们使用super调用来创建它。因此,无论何时我们在Logger上调用构造函数,我们总是得到完全相同的实例。

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