摘要
本文Michael Duell 著,为Wu译,出自<<非程序员>>
软件设计模式来源于 Christopher Alexander的建筑学模式和对象运动。根据Alexander的观点,模式就是一个对于特定的系统的通用解决方案本身的重复。对象运动关注于将现实世界模化为软件内部的关系。基于这两个原因,软件设计模式对于真实世界的物体而言同样应当是可以重复的。这篇文章呈现了现实的世界中的非软件的模式实例,这些模式来源于《设计模式—可复用面向对象软件的基础》(Design Patterns - Elements of Reusable Object-OrientedSoftware)[13]一书。这篇文章也举例讨论了模式语言对非软件的表现力和设计模式的练习。
简介
在软件行业中,模式支持者的团体正在扩大。模式发展的起源可以在建筑师Christopher Alexander的著作中找到,他认为模式是世界上特定系统的通用解决方案。他描述的模式可以在日常的建筑物中观察到。《模式语言》(A
PatternLanguage)[2]中的每个模式都包含了一张该模式原始范例的图片。
虽然物质是主流世界的观点,而模式为软件世界所信奉,模式也有其体现事物发展的根源[9]。不幸的是软件设计模式的例子不象Alexander模式那么丰富,因为软件设计表现的是精致的构思而不是那些最初产生的想法[13]。当今大多数软件的专有性限制了我们接触一流设计的机会。
根据Alexander 的说法,现实世界中模式总是重复自己,因为在一个特定的环境下,它们总是很好地适应现有的环境因素[1]。在软件中,要么现实世界的问题被完全地模式化,要么现实世界的物体被转换成为硬件和软件,用来产生现实世界的结果[5]。既然软件设计模式根源于 Alexander 的样式和对象,那么在现实世界中找到软件设计模式也是很正常的。这并不是说软件设计模式是现实世界事物的必然模型,而是说在契合的对象之间相互影响的关系可以在“现实世界”和软件对象中同样地观察到。为了验证这个假设,我们将为每一种设计模式找出一个现实世界的例子来。这些例子在下面的第二节至第四节列出。
创建型模式--与对象的创建有关
作者(指《设计模式》的作者—译注,下同)总结了五种创建型模式。创建型模式的例子可以在制造业,快餐,生物和行政机构中找到。
抽象工厂(Abstract Factory)举例
抽象工厂的目的是要提供一个创建一系列相关或相互依赖对象的接口,而不需要指定它们具体的类。这种模式可以在日本汽车制造厂所使用的金属冲压设备中找到。这种冲压设备可以制造汽车车身部件。同样的机械用于冲压不同的车型的右边车门、左边车门、右前挡泥板、左前挡泥板和引擎罩等等。通过使用转轮来改变冲压盘,这个机械产生的具体类可以在三分钟内改变[16]。
图 1:抽象工厂的冲压例子
工厂方法(FactoryMethod)举例
工厂方法定义一个用于创建对象的接口,但是让子类决定实例化哪个类。压注成型演
示了这种模式。塑料玩具制造商加工塑料粉,将塑料注入到希望形状的模具中[15]。玩
具的类别(车,人物等等)是由模具决定的。(有关抽象工厂与工厂方法我的那篇
图 2:使用注入成型为例子的工厂方法的对象图
生成器(Builder)举例
生成器模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。这种模式用于快餐店制作儿童餐。典型的儿童餐包括一个主食,一个辅食,一杯饮料和一个玩具(例如汉堡、炸鸡、可乐和玩具车)。这些在不同的儿童餐中可以是不同的,但是组合成儿童餐的过程是相同的。无论顾客点的是汉堡,三名治还是鸡肉,过程都是一样的。柜台的员工直接把主食,辅食和玩具放在一起。这些是放在一个袋子中的。饮料被倒入杯中,放在袋子外边。这些过程在相互竞争的餐馆中是同样的。
图 3:使用儿童餐作为例子的生成器模式的对象作用表
原型(Prototype)举例
原型模式使用原型实例指定创建对象的种类。新产品的原型通常是先于全部产品建立的,这样的原型是被动的,并不参与复制它自己。一个细胞的有丝分裂,产生两个同样的细胞,是一个扮演主动角色复制自己原型的例子,这演示了原型模式。一个细胞分裂,产生两个同样基因型的细胞。换句话说,细胞克隆了自己。
图 4:使用细胞分裂例子的原型模式对象图
单例(Singleton)举例
单例模式确保一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是模仿单集命名的,单集的定义是每个集合仅含有一个元素。美国总统的职位是单例,美国宪法规定了总统的选举,任期以及继任的顺序。这样,在任何时刻只能由一个现任的总统。无论现任总统的身份为何,其头衔“美利坚美利坚合众国总统”是访问这个职位的人的一个全局的访问点。
图 5:使用总统例子的单例模式对象图
分享到:
相关推荐
这些例子说明,软件设计模式不仅限于软件领域,它们可以从现实世界中找到对应的现象和应用。通过理解这些模式,开发者可以更好地运用到软件开发中,提高代码的灵活性和复用性。在实践中,这些模式可以帮助开发者避免...
这里我们将深入探讨基于Java的软件设计模式,通过基本例子和笔记总结来理解它们的核心概念。 1. 工厂模式:工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露实例化过程。在Java中,我们...
【软件设计模式】是软件开发中的重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式是为了解决在软件设计中遇到的一般问题而提出的解决方案,它并不直接解决编程中的具体...
MVC(Model-View-Controller)设计模式是一种广泛应用于软件开发,尤其是Web应用程序中的架构模式。它将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller),以此来实现业务逻辑、用户...
设计模式是一种在特定情况下解决常见问题的标准化解决方案,而体系结构则是软件系统的整体构造和组织方式。这篇练习题的资源旨在帮助学习者深化对这些概念的理解。 1. **设计模式**: - **单例模式**:确保一个类...
根据提供的信息,我们可以看出这是一本关于设计模式的书籍,旨在通过生动的例子来解释各种设计模式的概念、用途及实现方式。接下来,我们将详细介绍书中部分章节的设计模式知识点。 ### 第1章:策略模式(Strategy ...
总结来说,"刘伟设计模式和例子"是一份宝贵的资源,涵盖了软件设计的核心——设计模式。通过深入学习和理解这些模式,并结合具体的示例,开发者能够提升自己的编程技能,更好地应对各种软件设计问题。无论你是初学者...
上篇:软件设计模式例子代码 【例2.2】简单工厂方法模式-汽车保险 【例2.3】工厂方法模式-汽车保险 【例2.4】抽象工厂模式-房屋信息 【例2.5】生成器模式-房屋信息 【例2.6】单例模式-互联网连接 ...
设计模式是软件工程中的一种重要概念,它代表了在特定情境下解决常见问题的最佳实践。"设计模式可复用面向对象软件的基础"这一主题强调了设计模式在创建可维护、可扩展的面向对象软件中的核心作用。源码实现则为我们...
创建型设计模式是软件设计模式中的重要类别,主要关注对象的创建方式,旨在将对象的创建过程抽象化,使得系统在不指定具体类的情况下能够创建符合特定接口的对象。这一类模式通常包括工厂方法模式、抽象工厂模式、...
软件设计模式,是软件工程中的一种最佳实践,是针对特定问题的解决策略,被广泛应用于软件开发中,以提高代码的可读性、可维护性和可复用性。吉林大学的这门课程通过实例代码、课件和作业答案,深入浅出地讲解了设计...
### 软件体系结构与设计模式复习指南 #### 一、软件体系结构概述 **软件体系结构**是指具有一定形式的结构化元素的集合,主要包括处理构件、数据构件和连接构件。这些元素构成了软件的基本框架。 1. **处理构件**...
原型模式(Prototype Pattern)是软件设计模式中的一种结构型模式,它的主要目的是通过复制已有对象来创建新对象,从而减少创建新对象的成本。在原型模式中,类的实例化过程被替换为对已有实例的克隆操作,尤其适用...
在这个SDP02-06的例子代码中,可能会包含上述的一种或多种设计模式的实例。例如,如果文件中包含一个名为"Singleton"的类,那么这可能是在演示单例模式,确保一个类只有一个实例,并提供一个全局访问点。或者,如果...
设计模式是软件工程中的一种最佳实践,用于解决在软件开发过程中遇到的常见问题。这个压缩包文件名为“23种设计模式示例源码”,暗示其中包含了解决23种经典设计模式的具体实现代码,这对于初学者或者希望深入理解...
Java设计模式是软件开发中的一种重要思想,它总结了在解决特定问题时代码组织和复用的优秀实践。代理模式是这些模式中的一种,它的主要作用是在不改变原有对象行为的前提下,为对象添加额外的功能或者控制访问。在这...
设计模式是软件开发中的一种重要概念,它是经过时间验证并被广泛接受的解决方案模板,用于解决常见的编程问题。设计模式的出现源于建筑学家Christopher Alexander的工作,他在建筑领域提出了模式的概念,即针对特定...
java 设计模式是软件工程的基石,它们被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式可以让代码更容易被他人理解、保证代码可靠性、提高代码的重用性。 一、设计模式的分类 设计...
在软件开发领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的编程问题。这个吉林大学的SDP02-04例子代码很可能是为了教学目的,帮助学生理解和应用设计模式。下面,我们将深入探讨设计模式的核心...
《吉林大学软件设计模式SDP03-01例子代码》是针对软件开发中的一个重要主题——设计模式的实例代码集合。设计模式是软件工程中经过长期实践和验证的解决方案模板,它为解决常见问题提供了标准的方法。在这个压缩包中...