Python 设计模式
概述
现代软件开发需要满足复杂的业务需求。它还需要考虑未来的可扩展性和可维护性等因素。良好的软件系统设计对于实现这些目标至关重要。设计模式在这样的系统中起着重要作用。
要理解设计模式,让我们考虑下面的例子 −
每辆汽车的设计都遵循基本的设计模式,四个轮子、方向盘、核心驱动系统,如加速器-刹车-离合器等。
因此,所有重复建造/生产的东西,都不可避免地会遵循其设计模式。汽车、自行车、披萨、自动取款机,无论什么……甚至是你的沙发床。
设计几乎已经成为在软件中编码某些逻辑/机制/技术的标准方式,因此被称为或研究为软件设计模式。
为什么设计模式很重要?
使用设计模式的好处是 −
通过经过验证的方法帮助您解决常见的设计问题。
由于有详尽的文档记录,因此理解起来不会产生歧义。
减少总体开发时间。
帮助您比其他方式更轻松地处理未来的扩展和修改。
可以减少系统中的错误,因为它们是经过验证的常见问题解决方案。
设计模式的分类
GoF(四人帮)设计模式分为三类,即创建型、结构型和行为型。
创建型模式
创建型设计模式将对象创建逻辑与系统的其余部分分开。您无需创建对象,创建型模式会为您创建对象。创建模式包括抽象工厂、生成器、工厂方法、原型和单例。
由于 Python 语言的动态特性,创建模式在 Python 中并不常用。此外,语言本身为我们提供了以足够优雅的方式创建所需的所有灵活性,我们很少需要在顶层实现任何东西,如单例或工厂。
此外,这些模式还提供了一种创建对象的方法,同时隐藏了创建逻辑,而不是直接使用 new 运算符实例化对象。
结构模式
有时,您不需要从头开始,而是需要使用现有的一组类来构建更大的结构。这就是结构类模式使用继承来构建新结构的地方。结构对象模式使用组合/聚合来获得新功能。适配器、桥接、复合、装饰器、外观、享元和代理都是结构模式。它们提供了组织类层次结构的最佳方法。
行为模式
行为模式提供了处理对象间通信的最佳方法。模式属于以下类别:访问者模式、责任链模式、命令模式、解释器模式、迭代器模式、中介模式、备忘录模式、观察者模式、状态模式、策略模式和模板方法都是行为模式。
由于它们代表了系统的行为,因此通常用于描述软件系统的功能。
常用的设计模式
单例模式
它是所有设计模式中最具争议和最著名的模式之一。它用于过度面向对象的语言中,是传统面向对象编程的重要组成部分。
单例模式用于,
需要实现日志记录时。记录器实例由系统的所有组件共享。
配置文件正在使用它,因为信息缓存需要由系统中的所有各个组件维护和共享。
管理与数据库的连接。
这是 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 是一个单例。
当调用 __new__ 时,它通常会构造该类的一个新实例。当我们重写它时,我们首先检查我们的单例实例是否已创建。如果没有,我们使用 super 调用来创建它。因此,每当我们调用 Logger 上的构造函数时,我们总是会得到完全相同的实例。
>>> >>> obj1 = Logger() >>> obj2 = Logger() >>> obj1 == obj2 True >>> >>> obj1 <__main__.Logger object at 0x03224090> >>> obj2 <__main__.Logger object at 0x03224090>