2.在软件开发中,如果要实现复用,应尽量较多使用继承,较少使用合成聚合的方式。 3.当一个对象的行为取决于它所处的状态时,这时我们应该使用桥接模式 4.适配器模式是一种创建型设计模式
5.MVC结构中模型和视图之间交互的实现可以基于观察者模式,其中模型是被观察者。
答案:1. √ 2. × 3. × 4. × 5. √
(二)
1.设计模式的基本原理是面向实现编程。
2.在软件开发中,如果要实现复用,应尽量较多使用继承,较少使用合成聚合的方式。 3.当一个对象的行为取决于它所处的状态时,这时我们应该使用状态模式 4.适配器模式是一种创建型设计模式
5.MVC结构中模型和视图之间交互的实现可以基于观察者模式,其中模型是被观察者。
答案:1. × 2. × 3. √ 4. × 5. √
(三)
1. 开闭原则的关键是抽象化。
2. 在软件开发中,如果要实现复用,应尽量较多使用继承,较少使用合成聚合的方式。 3. 当一个对象的行为取决于它所处的状态时,这时我们应该使用桥接模式。 4. 适配器模式是一种创建型设计模式。
5. 命令模式标准类图中的Receiver不是必须存在的。
答案:
1 √ 2 × 3 × 4 × 5 √ (四)
1.设计模式的基本原理是面向实现编程。
2. 在软件开发中,如果要实现复用,应尽量较多使用继承,较少使用合成聚合的方式。 3. 当一个软件需要实现操作可撤销的功能时,我们应该使用命令模式。 4. 迭代器模式是一种结构型设计模式。 5. 抽象工厂方法完全符合开闭模式。
答案:
1 × 2 × 3 √ 4 × 5 × (五)
1.开闭原则的关键是抽象化。
2. 在软件开发中,如果要实现复用,应尽量较多使用继承,较少使用合成聚合的方式。 3. 当一个对象的行为取决于它所处的状态时,这时我们应该使用桥接模式。 4. 适配器模式是一种创建型设计模式。
5. 命令模式标准类图中的Receiver不是必须存在的。
答案:
1 √ 2 × 3 × 4 × 5 √ 四、 简答题
(一)
1. 假设系统中有三个类,分别为类A、类B和类C。在现有的设计中,让类A直接依赖类B,如果要将类A改为依赖类C,必须通过修改类A的代码来达成,请问这样的设计符合开闭原则吗(2分)?如果符合,请依据开闭原则进行解释,如果不符合请给出重构的方法(3分)。 2. 假设某一软件系统中存在类A,B,C,D,E。请分别画出使用这些类的中介者模式类图及外观模式类图。
3. 假如系统中存在一组具有相同结构的产品类,如图所示,如果要创建具体产品对象, 应该使用哪一种创建模式?(2分)
根据给出的类图,绘制出产品等级和产品族的图示。(3分)
根据产品族图示,绘制工厂类的层次结构图(必须写清类的方法)。(4分)
答案:
目前的设计不符合开闭原则(2分) 重构问题:新建接口I,使得类A依赖于接口I ,而类B和C实现接口I。(或相同概念的表述)(3分)
中介者模式类图(4分)外观模式类图(4分)
1)应该使用抽象工厂模式(2分) 2)产品等级和产品族的图示(3分)
工厂类图(4分,不对类名和方法名做限制,能够正确表达含义即可)
(二)
1. 简述开闭原则、依赖倒转原则的定义。 2. 简述策略模式的应用场景(3分),并绘制策略模式的类图(3分)。
3. 假如要用软件实现自动茶水销售机的功能,茶水的价格取决于茶的品种和杯子的大小。请回答以下问题,
1) 应该使用哪一种模式?(2分) 2) 请绘制该模式的类图。(4分)
答案:
1. 开闭原则:一个软件实体,应该对扩展开放,对修改关闭(3分)
依赖倒转原则:高层模块不应该依赖于低层模块,它们都应该依赖抽象。(3分)
2. 1)策略模式的应用场景:当解决一个问题,有很多种方法或解决方案可以使用时,可
以将每一种方法或解决方案封装成一个类,可以相互替换(或相同意义表达,3分). 2)类图(3分) Strategy Context
-strategy: Strategy+algorithm ().........strategy.algorithm();......strategy{abstract} +algorithm ()...ConcreteStrategyA+algorithm ()...ConcreteStrategyB+algorithm ()...
3. 1)应该使用桥接模式(2分)
2) 类图(4分,不对类名和方法名做限制,能够正确表达含义即可)
(三)
1.简述依赖倒转原则的定义。
2. 假如系统中存在一组具有相同结构的产品类,如图所示,如果要创建具体产品对象,
1) 应该使用哪一种创建模式?(2分)
2) 根据给出的类图,绘制出产品等级和产品族的图示。(4分)
3)根据产品族图示,绘制工厂类的层次结构图(必须写清类的方法)。(4分)
答案:
1. 高层模块不应该依赖低层模块,它们都应该依赖抽象(3分)。抽象不应该依赖于细节,细节应该依赖于抽象(3分)。
2.1)应该使用抽象工厂模式(2分) 2)产品等级和产品族的图示(4分)
3) 类图(4分,不对类名和方法名做限制,能够正确表达含义即可)
五、 程序设计题 (一)
1.现在需要开发一款游戏软件,请以单例模式来设计其中的Boss角色。角色的属性和动作可以任意设计。要求:该Boss类可以在多线程中使用。(8分)
2. 一个农场公司,专门负责培育各种水果,有葡萄,草莓和苹果,请使用工厂方法,编写工厂类和主程序,并在主程序中来完成草莓生长状态的描述。(8分)
3. 给定如图所示的树形结构,请应用组合模式,在客户端完成数据的展示。具体要求如下: 绘制组合模式的类图。(4分) 编写简单元素和复杂元素的代码。(4分)