1. 软件设计模式之概述
1. 软件设计的产生背景
设计模式最开始并非软件设计领域的原生概念,其起源可追溯至建筑领域。1977 年,身为美国著名建筑大师,同时也是加利福尼亚大学伯克利分校环境结构中心主任的克里斯托夫・亚历山大(Christopher Alexander),在《建筑模式语言:城镇、建筑、构造》一书中,深入剖析了一系列常见的建筑设计难题,并提出了多达 253 种针对城镇布局、邻里规划、住宅构造、花园打造以及房间布置等方面的基础设计模式。
时间来到 1990 年,软件工程领域开始关注设计模式,相关研讨活动逐渐增多。1995 年,艾瑞克・伽马(Erich Gamma)、理査德・海尔姆(Richard Helm)、拉尔夫・约翰森(Ralph Johnson)、约翰・威利斯迪斯(John Vlissides)四位作者合作完成了《设计模式:可复用面向对象软件的基础》。该书收录的 23 个设计模式,成为设计模式领域的关键转折点,极大地推动了软件设计模式的发展进程。这四位作者也凭借此成就,以 “四人组”(Gang of Four,GoF)的名号在软件开发领域声名远扬。
2. 软件设计模式的概念
软件设计模式(Software Design Pattern),也被简称为设计模式,是一套历经反复实践检验、被广泛熟知并精心分类编目的代码设计经验精华。它深度剖析了软件设计进程中反复涌现的典型问题,并针对性地提供了切实可行的解决方案。
换言之,软件设计模式是解决特定问题的一系列成熟策略与方法,是行业前辈们在长期代码设计实践中积累沉淀下来的智慧结晶。这些模式并非孤立的个体,而是具有高度的普遍性,能够在不同的软件项目场景中被反复运用,为开发者提供高效且可靠的设计指引,助力他们应对复杂多变的软件设计挑战。
3. 学习设计模式的必要性
从本质上讲,设计模式是面向对象设计原则的具体实践,是对类的封装性、继承性、多态性,以及类之间关联关系和组合关系的深刻理解与灵活运用。通过巧妙运用这些特性,设计模式能够将复杂的软件系统拆解为一个个可管理、可复用的模块,从而提升软件的整体质量和可维护性。
正确运用设计模式具有诸多显著优势:
- 提升编程能力:有助于程序员拓展思维,优化编程与设计思路,从而提升自身在软件开发领域的综合能力。
- 提高开发效率:使程序设计更具规范性,代码编制更趋工程化,显著提高软件开发效率,有效缩短软件的开发周期。
- 增强代码质量:设计出的代码具备高可重用性、强可读性、高可靠性、良好灵活性以及出色的可维护性,为软件的长期稳定运行和后续迭代升级奠定坚实基础。
4. 设计模式分类
- 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF(四人组)书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。
- 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。
- 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责。GoF(四人组)书中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。