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