Python设计模式
概述
现代软件开发需要解决复杂的业务需求。它还需要考虑诸如未来的可扩展性和可维护性等因素。良好的软件系统设计对于实现这些目标至关重要。设计模式在这样的系统中发挥着重要的作用。
为了理解设计模式,让我们考虑以下示例:
每辆汽车的设计都遵循基本的设计模式:四个轮子、方向盘、核心驱动系统(如加速器-制动器-离合器)等等。
所以,所有重复构建/生产的东西,不可避免地在设计中遵循某种模式……无论是汽车、自行车、披萨、自动取款机,还是任何东西……甚至你的沙发床。
在软件中,几乎已经成为编码某些逻辑/机制/技术的标准方式的设计,因此被称为或被研究为软件设计模式。
为什么设计模式很重要?
使用设计模式的好处包括:
通过行之有效的方法帮助您解决常见的设计问题。
由于它们有良好的文档记录,因此理解上没有歧义。
减少整体开发时间。
帮助您比以往更容易地处理未来的扩展和修改。
由于它们是针对常见问题的行之有效的解决方案,因此可以减少系统中的错误。
设计模式的分类
GoF(四人帮)设计模式分为三大类:创建型、结构型和行为型。
创建型模式
创建型设计模式将对象创建逻辑与系统的其余部分分离。创建型模式为您创建对象,而不是您自己创建对象。创建型模式包括抽象工厂、建造者、工厂方法、原型和单例。
由于语言的动态特性,创建型模式在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>