Object Oriented Python 简明教程
Python Design Pattern
Overview
现代软件开发需要满足复杂业务需求。它还需要考虑以下因素,例如将来的可扩展性和可维护性。软件系统的好设计对于实现这些目标至关重要。设计模式在这样的系统中起着重要作用。
为了理解设计模式,让我们考虑以下示例 -
-
每辆汽车的设计都遵循基本设计模式,四个轮子,方向盘,核心驱动系统,例如加速器-断裂-离合器等。
因此,所有反复构建/生成的物品必然在其设计中遵循一种模式,比如汽车、自行车、比萨饼、ATM 机,甚至是你的沙发床。
几乎已成为编码软件中的某种逻辑/机制/技术标准的方法的设计,因此被称为或研究为软件设计模式。
Why is Design Pattern Important?
使用设计模式的好处如下−
-
通过久经考验的方法帮你解决常见的设计问题。
-
没有歧义的理解,因为它们有详细的文档。
-
缩短总体开发时间。
-
更轻松地处理未来的扩展和修改。
-
可以减少系统错误,因为它们是针对常见问题的久经考验的解决方案。
Classification of Design Patterns
GoF(四人帮)设计模式分为三类,即创建型、结构型和行为型。
Creational Patterns
创建型设计模式将对象创建逻辑与系统其他部分分离开来。创建型模式替代你创建对象,为你创建它们。创建型模式包括抽象工厂、生成器、工厂方法、原型和单例。
由于语言的动态特性,Python 中通常不使用创建型模式。此外,语言本身为我们提供了创建的所需灵活性,以足够优雅的方式,我们很少需要在顶层实现任何东西,如单例或工厂。
此外,这些模式提供了一种在隐藏创建逻辑的情况下创建对象的方式,而不是直接使用 new 运算符实例化对象。
Commonly used Design Patterns
Singleton
它是所有设计模式中最有争议和最著名的模式之一。它用于过度面向对象语言,并且是传统面向对象编程的重要组成部分。
单例模式用于:
-
当需要实现日志记录时。logger 实例由系统的各个组件共享。
-
配置文件正在使用它,因为需要对信息进行缓存,并由系统中的所有各个组件共享。
-
管理到数据库的连接。
以下是 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 时,它会构造该类的某个新实例。当覆盖它时,我们首先检查我们的单例实例是否已创建。如果没有,我们使用超级调用创建它。因此,每当我们调用 Logger 上的构造函数时,我们始终会获得完全相同的实例。
>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>