(二)设计模式简介
设计模式的概念来源于建筑学,最早由建筑学家克里斯托弗·亚历山大(Christopher Alexander)在其著作《建筑的模式语言》(A Pattern Language)中提出。亚历山大提出了一系列在建筑设计中常见的、能够解决特定问题的模式,这些模式可以在不同的建筑设计中重复使用。
这一思想后来被引入软件工程领域,形成了软件设计模式的概念。设计模式是对在特定上下文中反复出现的问题的解决方案的描述。它们提供了关于如何组织代码的通用方案,而不是特定的实现代码。
在软件工程中,设计模式的推广和普及主要归功于四位计算机科学家——埃里希·伽玛(Erich Gamma)、理查德·赫尔姆(Richard Helm)、拉尔夫·约翰逊(Ralph Johnson)和约翰·弗利塞德斯(John Vlissides),他们共同撰写了《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)一书。这本书总结了23种经典的面向对象设计模式,被称为“GoF”(Gang of Four,四人帮)设计模式。
软件设计复杂的根本原因是变化,软件设计的目标是复用。面向对象编程的设计模式以面向对象编程的原则为的理论基础和指导方针,提供了经过验证的解决方案来应对变化和提高代码的复用性,可以分为三大类:
创建型模式:包括单例模式、工厂方法模式、抽象工厂模式、生成器模式、原型模式。这些设计模式关注的是如何创建对象以及如何简化对象创建的复杂性,以应对需求变化对具体对象创建实现所带来的影响。
结构型模式:包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式、代理模式。这些设计模式关注的是如何管理类与对象之间的组合关系,通过减少耦合性和增强灵活性来应对需求变化对对象结构带来的影响。
行为型模式:包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。这些设计模式关注的是对象之间的交互和职责分配,通过解决对象间职责分配和通信问题来应对需求变化对多个交互对象带来的影响。
参考:C++设计模式 李建忠