📜  Python设计模式

📅  最后修改于: 2021-01-04 04:44:03             🧑  作者: Mango


总览

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

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

  • 每辆车的设计都遵循基本的设计模式,包括四个车轮,方向盘,核心驱动系统(如油门离合器)等。

因此,所有重复建造/生产的东西,都将不可避免地遵循其设计模式:汽车,自行车,比萨饼,自动取款机,甚至……沙发床。

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

为什么设计模式很重要?

使用设计模式的好处是-

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

  • 毫无疑问,因为它们有据可查。

  • 减少整体开发时间。

  • 帮助您更轻松地应对将来的扩展和修改。

  • 由于它们已被证明是常见问题的解决方案,因此可以减少系统中的错误。

设计模式分类

GoF(四人制)设计模式分为三类,即创造,结构和行为。

创作模式

创建设计模式将对象创建逻辑与系统其余部分分开。创建模式可以代替您创建对象,而无需您创建对象。创建模式包括抽象工厂,构建器,工厂方法,原型和单例。

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

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

结构模式

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

行为模式

行为模式提供了处理对象之间通信的最佳方法。模式属于以下类别:访客模式,访问者责任链,命令,解释器,迭代器,介体,备忘录,观察员,状态,策略和模板方法。

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

常用设计模式

辛格尔顿

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

Singleton模式用于

  • 当需要记录日志时。记录器实例由系统的所有组件共享。

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

  • 管理与数据库的连接。

这是UML图,

UML图

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是Singleton。

调用__new__时,通常会构造该类的新实例。覆盖它时,我们首先检查是否创建了单例实例。如果没有,我们将使用超级调用来创建它。因此,每当我们在Logger上调用构造函数时,我们总是会获得完全相同的实例。

>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.logger object="" at="">
>>> obj2
<__main__.logger object="" at="">