问题 问答题

软件的设计模式描述了在特定场景下解决一般设计问题的类和相互通信的对象。它是人们在长期的开发实践中良好经验的结晶,它提供了一个简单、统一的描述方法,使人们可以复用这些软件设计方法和过程管理经验。现在,设计模式已经广泛地应用在软件开发中。
请围绕“基于设计模式的软件架构设计与应用”论题,依次对以下3个方面进行论述。
1.概要叙述你参与管理和开发的软件工程项目及你在其中所承担的主要工作。
2.简要介绍设计模式的基本分类,详细说明在你所参与管理和开发的软件工程项目中应用了哪些设计模式、方法,以及选用它们的原因。
3.分析并讨论使用设计模式的效果,并分析和评价设计模式对软件架构设计的影响。

答案

参考答案:简要介绍你参与规划、设计和实施的大中型信息系统软件工程项目,简要说明自己在该项目中的角色、所承担的主要任务及开展的主要工作。论文叙述自己参与设计和实施的软件工程项目应有一定的规模,自己在该项目中担任的主要工作应有一定的分量。
2.设计模式描述了在特定场景下解决一般设计问题的类和相互通信的对象。设计模式的核心在于提供了相关问题的解决方案。设计模式的基本组成元素有模式名称、问题或意图、情景、动机、解决方案、示例、结果情景、基本原理、相关模式和已知应用等。
设计模式主要用于得到简洁灵活的系统设计,GoF的书中共有23个设计模式,这些模式可以按两个准则来分类:一是按设计模式的目的划分,可分为创建型、结构型和行为型3种模式;二是按设计模式的范围划分,即根据设计模式是作用于类还是作用于对象来划分,可分为类设计模式和对象设计模式,如表所示。

设计模式空间
目的
创建型 结构型 行为型
范围 Factory Method Adapter(类) Interpreter
Template Method
对象 Abstract Factory
Builder
Prototype
Singleton
Adapter(对象)
Bridge
Comoosite
Decorator
Facade
Flyweight
Proxy
Chain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
创建型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口,封装了系统中对象如何创建、组合等信息。该模式允许在系统中创建对象,而不需要在代码中标识特定类的类型,这样用户就不需要编写大量、复杂的代码来初始化对象。它是通过该类的子类来创建对象的。但是,这可能会限制在系统内创建对象的类型或数目。创建型模式主要有Factory Method(工厂方法)、Abstract Factory(抽象工厂)、Builder(构建器)、Prototype(原型)和Singleton(单独)等模式。
结构型模式主要涉及如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理和继承等概念将一个或多个类或对象进行组合、封装,以提供统一的外部视图或新的功能。该模式允许在不重写代码或自定义代码的情况下创建系统,从而使系统具有增强的重复使用性和应用性能。该模式控制了应用程序较大部分之间的关系,将以不同的方式影响应用程序。结构型模式主要有Adapter(适配器)、Bridge(桥接)、Composite(组成)、Decorator(装饰)、Facade(外观)、Flyweight(享元)和Proxy(代理)等。
行为型模式主要涉及算法和对象间职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任意一个对象都无法单独完成的任务。该模式可以影响一个系统的状态和行为流。通过优化状态和行为流转换和修改的方式,可以简化、优化并且提高应用程序的可维护性。行为型模式主要有Observer(观察者)、Strategy(策略)、Interpreter(解释器)、Template Method(模板方法)、Chain of Responsibility(职责链)、Command(命令)、Iterator(迭代器)、Mediator(中介者)、Memento(备忘录)、State(状态)和Visitor(访问者)等。
能够全面和准确地描述该软件工程项目的应用环境和需求,深入地阐述所选定的设计模式的主要组成元素,以及选用它们的原因,对于项目开发过程中采用的技术和方法要针对该软件工程项目的实际特点,具有一定的广度和深度。
3.结合软件工程项目实际工作,举例说明设计模式的使用效果,并针对设计模式对软件开发的影响展开分析与讨论,着重阐述所采用的设计模式对该工程项目后期的工作产生了哪些积极(或消极)的影响(效果和存在的问题)。最后,进一步叙述你对设计模式在软件架构设计中的几点应用体会,以及在今后的工作过程中,如果碰到类似的开发项目你将如何应用这些经验或教训。对需要进一步改进的地方,应有具体的着眼点,不能泛泛而谈。

选择题
多项选择题