吉林大学2012级设计模式试题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Knight( ) { weapon = new Rifle( ); castle = new StoneCastle( ); power = new HorseMagic( );
} }; 现希望分离英雄与具体特性(如武器、城堡、法器等)的创建。请选择适当的设计模式 重新设计,实现设计者的愿望。简要说明你的设计方案,并给出示例代码。 2. 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。 (1) 要有联动性,老鼠和主人的行为是被动的; (2) 考虑可扩展性,猫的叫声可能引起其他联动效应。 请选择适当的设计模式描述上述场景,简要说明你的设计方案,并给出示例代码。。
(B) 属于黑盒复用,封装性好,因为被包含对象的内部细节对外是不可见
(C) 可以在运行时将被包含对象改变成同类型对象,从而改变容器类的行为效果,但没有
改变容器类的接口
(D) 比继承关系更加灵活,代价是相比继承关系,增强了类间的耦合度
5. 用于分离接口和具体实现,使得接口和实现可独立变化的是:
(A)适配器模式 (B) 桥接模式 (C) 命令模式 (D)模板方法模式
2014-2015 学年第 1 学期
2012 级《软件设计模式》考试试题(开卷)
考试时间:2014 年
班级
学号
姓名
本试卷满分 100 分; 请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰; 试题中使用 C++语言作为描述语言,答题时可以使用 C++或 Java 或 C#程序设计语言中
1. (12 分)请应用访问者模式重新给出设计方案或示例代码,使得你的新设计满足根据上 述要求。
2. (4 分)请说明如果增加新的功能(如试用),1 中的设计如何适应。请给出示例代码. 3. (4 分)请说明如果增加新的公司(如中兴公司),1 中的设计如何适应。请给出示例代码.
四、(40 分,每题 20 分)应用设计模式,给出设计方案、示例代码。 1. 游戏中每个初始英雄带一样武器,占据一个城堡,拥有一件法器。武器、城堡、法器 都有多种,现已预设了几类英雄,如海盗(火枪、岛城、行船术)、骑士(火枪、石城、 骑马术)等。
6. 体现“集中管理多个对象间的交互过程和顺序”的是:
(A)生成器模式 (B) 门面模式 (C) 策略模式 (D)中介者模式
第 1页 共 4页
7. 限制类的实例对象只能有一个的是:. (A) 原型方法模式 (B) 工厂方法模式 (C) 单件模式
(D) 生成器模式
8. 用于为一个对象添加更多功能而不使用子类的是:
的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用; 请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸
一并交上来。
一、单选题(共 20 分,每题 2 分)
1. 类设计中,“变化是绝对的,稳定是相对的”,下列哪个不属于这句话中“变化”的范畴?
(A) 改变函数参数的类型
(B) 泛化类(超类)可以显式地捕获那些公共的属性和方法。特殊类(子类)则通过附加
属性和方法来进行实现的扩展
(C) 破坏了封装性,因为这会将父类的实现细节暴露给子类
(D) 继承本质上是“白盒复用”,对父类的修改,不会影响到子类
4. 下列关于对象组合/聚合,说法错误的是:
(A) 容器类能通过被包含对象的接口来对其进行访问
4. 若从 Shape 类再派生一个新的子类 Picture,且 Picture 组合多个 Shape 对象,其中 Picture 的 Draw 就是依次绘制其组合的各个 Shape。现假设一个 Picture 对象只包含一个 Rectangle 和一个 Circle 对象,请在 3 的基础上继续扩展,并编写主函数,使得主函数能够输出: Start Drawing … Draw Rectangle. Draw Circle. Draw Over. 请给出具体设计代码和主函数。
第 3页 共 4页
(1) 未来一定会增加新武器、新城堡、新法器等。如武器中增加一种新武器:激光枪。 (2) 来一定会增加新的预设类英雄,如未来战士。 (3) 各类英雄的特征不完全相同,但可能会有重复。如海盗、骑士都使用火枪。 最初的部分代码如下: class Knight:public Hero { public:
(B) 增加新的数据成员
(C) 改变编程语言
(D) 改变对象互的过程和顺序
2. Open-Close 原则的含义是一个软件实体:
(A) 应当对扩展开放,对修改关闭
(B) 应当对修改开放,对扩展关闭
(C) 应当对继承开放,对修改关闭
(D) 以上都不对
3. 下列关于继承表述错误的是:
(A) 继承是一种通过扩展一个已有类的实现,从而获得新功能的复用方法
二、(共 20 分,每题 5 分) 阅读代码,按要求回答问题:
class Shape {
class Rectangle:public Shape {
public:
public:
virtual ~Shape( ) {}
virutal ~Rectangle( ) {}
virtual void Draw( ) const = 0;
(A) 桥接模式
(B) 适配器模式 (C) 合成(组合)模式 (D) 装饰器模式
9. 适配器设计模式可以用于: (A) 将已有类的接口转换成和目标接口兼容 (B) 改进系统性能 (C) 将客户端代码数据转换成目标接口期望的合适的格式 (D) 使所有接口不兼容类可以一起工作
10. 关于原型方法模式的说法,错误的是: (A)便于在运行时刻更换原型对象; (B)各产品必须实现复制的方法,如 Clone 方法; (C)实现产品复制功能的难易程度,是应用该模式必须考虑的; (D)设计时,不能同时使用生成器模式和原型方法模式;
virtual void Draw( ) const {
};
cout<<"Draw Rectangle."<<endl;
}
};
已 class Ellipse {
class Circle:public Shape {
有 public:
public:
的 Ellipse( int a,int b):ra(a),rb(b) { }
2. 若 Circle::Draw( )的实现就是长短轴均为 2 的 Ellipse::X_Draw( ),请问你怎样设计。给出你 的设计方案或示例代码。
第 2页 共 4页
3. 请使用装饰器模式给 Draw 添加新的功能。给出示例代码及相应的主函数。 如扩展矩形 Draw 的输出为: Start Drawing … Draw Rectangle. 扩展圆形 Draw 的输出为: Draw Circle. Draw Over.
三、(20 分)现开发一个应届毕业生招聘软件,初步方案中的类图如下:
(1) 各公司招聘毕业生的流程是不一样的; (2) 同一公司招聘不同毕业生(这里举例 Boy,Girl)的流程也是不一样的; (3) 已知不同毕业生的类别是稳定的。(如 Boy 和 Girl) (4) 以后可能增加新功能,如试用(Practise). (5) 以后可能增加新的公司。
全卷完
第 4页 共 4页
virutal ~Circle( ) { }
椭 bool X_Draw( ) { /*略*/ }
virtual void Draw( ) const {
圆 private:
cout<<"Draw Circle."<<endl;
类 int ra,int rb; //椭圆长短轴
}
};
};
1. 考察 Shape,Rectangle 和 Circle 三个类。若 Circle::Draw( )的实现会有多种其它方法,又不 想从 Circle 类派生新子类。请给出你的设计方案或示例代码。
相关文档
最新文档