设计模式概述

设计模式起源于建筑领域,由Christopher Alexander引入,GoF的《设计模式:可复用面向对象软件的基础》将其正式引入软件工程。设计模式包括创建型、结构型和行为型三大类,提供了通用的设计词汇,帮助开发者理解和交流设计方案,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计模式历史

设计模式起源于建筑领域,由Christopher Alexander(克里斯托弗.亚历山大)首次提出。

最早将模式的思想引入软件工程方法学的是1991-1992年以“四人组(Gang of Four,简称GoF,分别是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides)”自称的四位著名软件工程学者,他们在1994年归纳发表了23种在软件开发中使用频率较高的设计模式。

1995年, GoF将收集和整理好的23种设计模式汇编成Design Patterns: Elements of Reusable Object-Oriented Software【《设计模式:可复用面向对象软件的基础》】一书,该书的出版也标志着设计模式正式成为面向对象(Object Oriented)软件工程的一个重要研究分支。

设计模式描述

Christopher Alexander在《模式语言》[Alex2]中给模式下了一个非常有名的定义:

“每个模式都是一个法则,由三部分组成。它表现的是一种特定的上下文、一个问题和一个解决方案之间的关系。”

一般而言,一个模式有四个基本要素:
1.模式名称( pattern name)一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了我们的设计词汇。基于一个模式词汇表,我们自己以及同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他人交流设计思想及设计结果。

2.问题(problem)描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,有时候,问题部分会包括使用模式必须满足的一系列先决条件。

3.解决方案(solution)描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。

4.效果(consequences)描述了模式应用的效果及使用模式应权衡的问题。

一个设计模式命名、抽象和确定了一个通用设计结构的主要方面,这些设计结构能被用来构造可复用的面向对象设计。设计模式确定了所包含的类和实例,它们的角色、协作方式以及职责分配。每一个设计模式都集中于一个特定的面向对象设计问题或设计要点,描述了什么时候使用它,在另一些设计约束条件下是否还能使用,以及使用的效果和如何取舍。

设计模式分类

模式依据其目的可分为创建型(Creational)、结构型(Structural)、或行为型(Behavioral)三种。

创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或对象怎样交互和怎样分配职责进行描述。

在GoF 23种设计模式中包含5种创建型设计模式、7种结构型设计模式和11种行为型设计模式。

从上面的分类可以发现,设计模式还可以分为类模式和对象模式。类模式处理类和子类之间的关 系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。对象模式处理对象间的 关系,这些关系在运行时刻是可以变化的,更具动态性。

通常我们将两种分类方式结合使用,如单例模式是对象创建型模式,模板方法模式是类行为型模式。

具体设计模式分类如下图:
在这里插入图片描述

设计模式作用
一套通用的设计词汇

设计模式提供了一套通用的设计词汇和一种通用的形式来方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。

书写文档和学习的辅助手段

设计模式来源众多专家的经验和智慧,它们是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案将可以让我们避免做一些重复性的工作,有助于我们提高开发和设计效率。

学习设计模式将有助于初学者更加深入地理解面向对象思想,让你知道:如何将代码分散在几个不同的类中?为什么要有“接口”?何谓针对抽象编程?何时不应该使用继承?如果不修改源代码增加新功能?同时还让你能够更好地阅读和理解现有类库(如JDK)与其他系统中的源代码,让你早点脱离面向对象编程的“菜鸟期”,早日走向人生巅峰。
注:上述部分引自《设计模式:可复用面向对象软件的基础》和刘伟的《设计模式》。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值