阅读以下关于设计模式应用的叙述,根据要求回答问题。
[说明]
某软件公司承接了一项面向儿童的模拟游戏软件的开发任务,该游戏软件主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏软件需要模拟的鸭子种类及其特征如表所示
鸭子种类及其特征 | |||
鸭子种类 | 发声特征 | 飞行特征 | 外观特征 |
灰鸭(MallardDuck) | 发出“嘎嘎”声(Quack) | 用翅膀飞行(FlyWithWings) | 灰色羽毛 |
红头鸭(RedHeadDuck) | 发出“嘎嘎”声(Quack) | 用翅膀飞行(FlyWithWings) | 灰色羽毛、头部红色 |
棉花鸭(CottonDuck) | 不发声(QuackNoWay) | 不能飞行(FlyNoWay) | 白色 |
橡皮鸭(RubberDuck) | 发出橡皮与空气摩擦的声音(Squeak) | 不能飞行(FlyNoWay) | 黑白橡皮颜色 |
图1
[问题3]
设计模式在力度和抽象层次上各不相同。按设计模式的目的划分,可分为创建型、结构型和行为型3种模式;按设计模式的范围划分,可分为类设计模式和对象设计模式两种。请将下列A~J标记的设计模式填入到下表中的(1)~(5)空缺处。(请用A~J答题)
A.Abstract Factory模式 B.Adapter模式 C.Chain of Responsibility模式
D.Decorator模式 E.Factory Method模式F.Flyweight模式
G.Interpreter模式 H.Iterator模式 I.Template Method模式
J.Visitor模式
设计模式空间 | ||||
目 的 | ||||
创建型 | 结构型 | 行为型 | ||
范 围 | 类 | (1) | — | (2) |
对 象 | (3) | (4) | (5) |
参考答案:设计模式主要用于得到简洁灵活的系统设计,GoF的书中共有23个设计模式,这些模式可以按两个准则来分类:一是按设计模式的目的划分,可分为创建型、结构型和行为型3种模式;二是按设计模式的范围划分,即根据设计模式是作用于类还是作用于对象来划分,可分为类设计模式和对象设计模式,如表所示。
创建型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口,封装了系统中对象如何创建及组合等信息。该模式允许在系统中创建对象,而不需要在代码中标识特定类的类型,这样用户就不需要编写大量复杂的代码来初始化对象。它是通过该类的子类来创建对象的。但是,这可能会限制在系统内创建对象的类型或数目。创建型模式主要有Factory Method(工厂方法)、Abstract Factory(抽象工厂)、Builder(构建器)、Prototype(原型)和Singleton(单独)等模式。 设计模式空间 目的 创建型 结构型 行为型 范围 类 Factory Method Adapter(类) Interpreter
Template Method 对象 Abstract Factory
Builder
Prototype
SingletonAdapter(对象)
Bridge
Composite
Decorator
Facade
Flyweight
ProxyChain of Responsibility
Command
Iterator
Mediator
Memento
Observer
State
Strategy
Visitor
结构型模式主要用于如何组合已有的类和对象以获得更大的结构,一般借鉴封装、代理或继承等概念将一个或多个类或对象进行组合和封装,以提供统一的外部视图或新的功能。该模式允许在不重写代码或自定义代码的情况下创建系统,从而使系统具有增强的重复使用性和应用性能。该模式控制了应用程序大部分之间的关系,将以不同的方式影响应用程序。结构型模式主要有Adapter(适配器)、Bridge(桥接)、Composite(组成)、Decorator(装饰)、Fagade(外观)、Flyweight(享元)和Proxy(代理)等。
行为型模式主要用于对象之间的职责及其提供的服务的分配,它不仅描述对象或类的模式,还描述它们之间的通信模式,特别是描述一组对等的对象怎样相互协作以完成其中任意一个对象都无法单独完成的任务。该模式可以影响一个系统的状态和行为流。通过优化状态和行为流转换及修改的方式,可以简化、优化并且提高应用程序的可维护性。行为型模式主要有Interpreter(解释器)、TemplateMethod(模板方法)、Chain of Responsibility(职责链)、Command(命令)、Iterator(迭代器)、Mediator(中介者)、Memento(备忘录)、Observer(观察者)、State(状态)、Strategy(策略)和Visitor(访问者)等。