吉林大学2014级设计模式期末试题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2016-2017学年第1学期

2014级《设计模式》考试试题A卷

考试时间:2016年11月班级学号姓名

✧本试卷满分100分;

✧请将答案写在答题纸上,写明题号,不必抄题,字迹工整、清晰;

✧试题中使用C++语言作为描述语言,答题时可以使用C++或Java或C#程序设计语言中

的任意一种作为描述语言,但整个卷面只能使用其中一种,不得混合使用;

✧请在答题纸和试题纸上都写上你的班级,学号和姓名,交卷时请将试题纸、答题纸和草纸

一并交上来。

一、单选题(共20分,每题2分)

1.设计模式不能解决下列哪个问题:

(A)针对接口编程(B)增强软件扩展性和灵活性

(C)适应需求变化(D)确定软件功能都正确实现

2.面向对象方法中类的设计不包括:

(A)类的组织与表示(B)行为的组织与表示

(C)代码的组织与表示(D)属性的组织与表示

3.下列选项中最适合用依赖关系描述的是:

(A)丈夫和妻子(B)公司和部门(C)工厂和产品(D)水果和苹果4.设计模式的关键要素不包括:

(A)名称(B)目的(C)解决方案(D)效果

5.下列选项中不属于对象模式的是:

(A)建造者模式(B)代理模式(C)模板方法模式(D)迭代器模式6.下列哪个模式是迪米特原则的典型应用?

(A)原型模式(B)外观模式(C)装饰模式(D)代理者模式7.为了使客户端以一致的方式处理树形结构中的叶子节点和容器节点,实现客户端的透明操作,组合模式中引入了:

(A)客户类(B)叶子构件类(C)容器构件类(D)抽象构件类8.桥接模式的本质是:

(A)转换匹配,复用功能(B)分离抽象和实现

(C)封装交互,简化调用(D)控制对象访问

9.下列关于策略模式和状态模式的描述中不准确的是:

(A)策略模式和状态模式都包括环境类角色

(B)使用策略模式时,客户端需要知道所选的具体策略是哪一个

(C)使用状态模式时,客户端需要知道环境类的状态是如何切换的

(D)状态模式中,环境类和状态类之间可能存在双向的关联关系

10.MVC架构在实现上结合了多种设计模式,其中最典型的模式应用是:

(A)职责链和建造者(B)简单工厂和桥接

(C)中介者和观察者(D)抽象工厂和组合

二、简答题(共30分,每题6分)

1.你认为面向对象方法中类设计的难点是什么,如何应对?

2.请阐述你对开闭原则的理解,以及如何设计能达到开闭原则的要求?

3.请举例说明在应用标准外观模式时可能产生的问题,以及对应的解决方案。

4.银行信用卡中心的电子账单系统包括了发送器、账单、广告信和发送队列等对象,其中广告信的业务逻辑是:先到数据库中把客户信息一个一个的取出,每个客户都生成一份个性化的邮件,然后交给发送机进行发送处理。请问使用哪种模式设计广告信较好?如何设计?

5.软件公司要开发一个文本编辑软件,该软件需要支持用户在文本编辑中的撤销和重做等动作,为了实现该功能,请问采用何种模式设计比较好?如何设计?

三、程序设计题(共30分,每题15分)

1.请你按照单例模式的思想,重新实现下面给出的DBConnections类,确保系统中该类的实例对象最多只能存在三个。

class DBConnections{

public:

DBConnections(){...}

~DBConnections(){...}

void ConnectionInfo(){...}

};

2.小王为某公司开发一个人员薪酬计算程序。该公司现有三类人员:经理、兼职技术员、销售员。薪酬计算方法是:经理拿固定月工资8000元;兼职技术员按每小时100元领取月工资;销售员按该当月销售额的6%提成。小王使用面向对象方法进行了设计,部分代码如下所示。几个月后,该公司要从现有销售人员中提拔一个销售经理,销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,提成为所有销售人员当月销售总额的5‰。

并且,在未来可能还会出现技术经理等新的岗位,也对应有新的薪酬计算方法。

1)请你分析小王原来的设计存在什么问题?(5分)

2)请你采用帮小王重新设计,使得新设计能够适应公司薪酬计算需求的变化。简要说明

你的设计思想,给出实现代码。(10分)

class Employee{

public:

Employee(string nm,int sa);

virtual~Employee();

virtual void CalSalary();//计算月工资protected:

string name;//姓名

int salary;//月工资

};class Manager:public Employee{ public:

Manager(string nm,int sa); virtual void CalSalary(); };

class Technician:public Employee{ public:

Technician(string nm,int p,int h); virtual void CalSalary(); private:

int payperhour;

int hours;

};class Salesman:public Employee{ public:

Salesman(string nm,int r,int am); virtual void CalSalary(); private:

int rate;

int amount;

};

四、综合应用题(共20分)

小王正在为某公司设计开发一套物业销售管理系统,该公司有多种类型的物业,如公寓、商铺等,并且在将来可能会增加新的物业类型,如别墅、车库等;公司的经纪每销售一个物业,主管就会收到相应的销售信息。请你针对上面的描述,帮助小王选择合适的模式设计物业、经纪、主管等相关类。

1)简要说明你的设计思路和选择的模式。(8分)

2)给出你设计的UML类图和实现代码。(12分)

(全卷完)

相关文档
最新文档