中南大学软件体系结构实验6行为型设计模式实验

合集下载

中南大学软件体系结构实验报二

中南大学软件体系结构实验报二

实验2 UML实验(2)实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的1. 学习类图的绘制;2. 学习从系统需求中识别类,并构建相应的面向对象模型;3. 学习使用顺序图描述对象之间的交互;4. 学习使用活动图为业务流程建模;5. 学习使用PowerDesigner实现正向工程和逆向工程。

二、实验内容1. 根据以下描述绘制类图,再正向工程生成Java源代码(也可生成其他面向对象语言的源代码,如C++或C#等):图形(Shape)可分为圆形(Circle)、矩形(Rectangle)、椭圆形(Ellipse)等具体图形,在Shape 类中提供了一个抽象的draw()方法用于绘制图形,而在具体的图形类中实现该抽象draw()方法。

提供一个图形工厂类(ShapeFactory),该类提供一个静态方法createShape(char type),其返回类型为Shape,参数type为所需绘制图形对应的代码,例如“c”表示圆形,“r”表示矩形,“e”表示椭圆形等,在createShape()方法中,可以使用条件语句来判断所需绘制图形的类型,并根据参数的不同返回不同的具体形状对象。

【注:“创建关系”是一种特殊的“依赖关系”】2. 根据以下描述绘制类图:某商场会员管理系统包含一个会员类(Member),会员的基本信息包括会员编号、会员姓名、联系电话、电子邮箱、地址等,会员可分为金卡会员(GoldMember)和银卡会员(SilverMember)两种,不同类型的会员在购物时可以享受不同的折扣;每个会员可以拥有一个或多个订单(Order),每一个订单又可以包含至少一条商品销售信息(ProductItem),商品销售信息包括订单编号、商品编号、商品数量、商品单价和折扣等;每一条商品销售信息对应一类商品(Product),商品信息包括商品编号、商品名称、商品单价、商品库存量、商品产地等。

中南大学软件体系结构实验6行为型设计模式实验

中南大学软件体系结构实验6行为型设计模式实验

《软件体系结构》实验报告项目名称行为型设计模式实验专业班级学号姓名实验成绩:批阅教师:年月日实验6 行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1. 某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。

试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。

2. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。

为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。

3. 某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:(1) 学生凭学生证可享受票价8折优惠;(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);(3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

中南大学刘伟《设计模式》实验参考答案

中南大学刘伟《设计模式》实验参考答案

3. 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计 一个图片读取器(ImageReader),如 GIF 图片读取器(GifReader)用于读取 GIF 格式的图片、JPG 图片读取器(JpgReader)用于读取 JPG 格式的图片。图片读取器对象通过图片读取器工厂 ImageReaderFactory 来创建,ImageReaderFactory 是一个抽象类,用于定义创建图片读取器
4
return array[random()]; } //随机生成一个整数作为数组下标 public static int random() {
Date d = new Date(); Random random = new Random(); int value = Math.abs(random.nextInt()); value = value % 4; return value; } public static void main(String args[]) { Multiton m1,m2,m3,m4; m1 = Multiton.getInstance(); m2 = Multiton.getInstance(); m3 = Multiton.getInstance(); m4 = Multiton.getInstance();
2
的工厂方法,其子类 GifReaderFactory 和 JpgReaderFactory 用于创建具体的图片读取器对象。 试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的灵活性和可
扩展性。
参考答案:
ImageReaderFactory
ImageReader
+ createImageReader () : ImageReader

设计模式实验报告总结(3篇)

设计模式实验报告总结(3篇)

第1篇一、实验背景随着软件工程的不断发展,设计模式作为一种解决软件开发中常见问题的有效方法,越来越受到广泛关注。

本次实验旨在通过学习设计模式,提高编程能力,掌握解决实际问题的方法,并加深对设计模式的理解。

二、实验目的1. 理解设计模式的基本概念和分类;2. 掌握常见设计模式的原理和应用;3. 提高编程能力,学会运用设计模式解决实际问题;4. 培养团队协作精神,提高项目开发效率。

三、实验内容本次实验主要涉及以下设计模式:1. 创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式;2. 结构型模式:适配器模式、装饰者模式、桥接模式、组合模式、外观模式;3. 行为型模式:策略模式、模板方法模式、观察者模式、责任链模式、命令模式。

四、实验过程1. 阅读相关资料,了解设计模式的基本概念和分类;2. 分析每种设计模式的原理和应用场景;3. 编写代码实现常见设计模式,并进行分析比较;4. 将设计模式应用于实际项目中,解决实际问题;5. 总结实验经验,撰写实验报告。

五、实验结果与分析1. 创建型模式(1)单例模式:通过控制对象的实例化,确保一个类只有一个实例,并提供一个访问它的全局访问点。

实验中,我们实现了单例模式,成功避免了资源浪费和同步问题。

(2)工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。

实验中,我们使用工厂模式创建不同类型的交通工具,提高了代码的可扩展性和可维护性。

(3)抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要指定具体类。

实验中,我们使用抽象工厂模式创建不同类型的计算机,实现了代码的复用和扩展。

(4)建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

实验中,我们使用建造者模式构建不同配置的房屋,提高了代码的可读性和可维护性。

2. 结构型模式(1)适配器模式:将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。

设计模式分类(创建型模式、结构型模式、行为型模式)

设计模式分类(创建型模式、结构型模式、行为型模式)

设计模式分类(创建型模式、结构型模式、⾏为型模式)1.创建型模式前⾯讲过,社会化的分⼯越来越细,⾃然在软件设计⽅⾯也是如此,因此对象的创建和对象的使⽤分开也就成为了必然趋势。

因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进⾏研究,从⽽能够⾼效地创建对象就是创建型模式要探讨的问题。

这⾥有6个具体的创建型模式可供研究,它们分别是:简单⼯⼚模式(Simple Factory)⼯⼚⽅法模式(Factory Method)抽象⼯⼚模式(Abstract Factory)创建者模式(Builder)原型模式(Prototype)单例模式(Singleton)说明:严格来说,简单⼯⼚模式不是GoF总结出来的23种设计模式之⼀。

2.结构型模式在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发⼈员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。

对象结构的设计很容易体现出设计⼈员⽔平的⾼低,这⾥有7个具体的结构型模式可供研究,它们分别是:外观模式/门⾯模式(Facade门⾯模式)适配器模式(Adapter)代理模式(Proxy)装饰模式(Decorator)桥梁模式/桥接模式(Bridge)组合模式(Composite)享元模式(Flyweight)3.⾏为型模式在对象的结构和对象的创建问题都解决了之后,就剩下对象的⾏为问题了,如果对象的⾏为设计的好,那么对象的⾏为就会更清晰,它们之间的协作效率就会提⾼,这⾥有11个具体的⾏为型模式可供研究,它们分别是:模板⽅法模式(Template Method)观察者模式(Observer)状态模式(State)策略模式(Strategy)职责链模式(Chain of Responsibility)命令模式(Command)访问者模式(Visitor)调停者模式(Mediator)备忘录模式(Memento)迭代器模式(Iterator)解释器模式(Interpreter)。

中南大学 计算机体系结构实验报告

中南大学 计算机体系结构实验报告

计算机体系结构课程设计学院:信息科学与工程学院专业班级:指导老师:学号:姓名:目录实验 1 对指令操作码进行霍夫曼编码 (3)一、实验目的 (3)二、实验内容 (3)三、设计思路 (4)四、关键代码 (4)五、实验截图 (5)六、源代码 (5)实验 2 使用LRU 方法更新Cache (8)一、实验目的 (8)二、实验内容 (8)三、设计思路 (9)四、程序截图 (9)五、实验代码 (9)实验总结 (16)参考文献 (16)实验1 对指令操作码进行霍夫曼编码一、实验目的了解和掌握指令编码的基本要求和基本原理二、实验内容1. 使用编程工具编写一个程序,对一组指令进行霍夫曼编码,并输出最后的编码结果以及对指令码的长度进行评价。

与扩展操作码和等长编码进行比较。

2. 问题描述以及问题分析举例说明此问题,例如:P1P2P3P4P5P6P70.450.300.150.050.030.010.01下表所示:对此组指令进行HUFFMAN 编码正如下图所示:最后得到的HUFFMAN 编码如下表所示:P1P2P3P4P5P6P7 010110111011110111110111111最短编码长度为:H=0.45*1+0.30*2+0.15*3+0.05*4+0.03*5+0.01*6+0.01*6=-1.95.要对指令的操作码进行HUFFMAN 编码,只要根据指令的各类操作码的出现概率构造HUFFMAN 树再进行HUFFAM 编码。

此过程的难点构造HUFFMAN 树,进行HUFFAM 编码只要对你所生成的HUFFMAN 树进行中序遍历即可完成编码工作。

三、设计思路观察上图,不难看出构造HUFFMAN 树所要做的工作:1、先对各指令操作码的出现概率进行排序,构造一个有序链表。

2、再取出两个最小的概率节点相加,生成一个生的节点加入到链表中,同时从两表中删除此两个节点。

3、在对链表进行排序,链表是否只有一个节点,是则HUFFAN 树构造完毕,否则继续做 2 的操作。

中南大学软件工程复习题及参考答案

中南大学软件工程复习题及参考答案

中南大学复习题及参考答案软件工程一、选择题:1.下面哪些UML图描述系统行为( A )A.用例图B.类图C.对象图2.属于概要设计活动的是( A )A.软件结构设计B.数据结构设计C.算法设计3.属行为型设计模式的是(C)A.组合模式B.工厂方法模式C.观察者模式4.下列说法正确的是( B )A.UML是软件开发方法B.UML是系统描述语言C.UML是软件开发过程5. 根据程序流程图划分的模块通常是( B )A. 信息内聚的模块B. 过程内聚的模块C.逻辑内聚的模块6.如果某程序中的比较个数是m,则其McCabe环形复杂度为( C )A.m-1B.mC.m+17.按ISO9000-3的说明,下列属软件配置项的是( C )A.软件开发方法B.软件开发组织管理制度C.软件开发合同8. 软件测试的目的是( C )A.证明软件无错B.发现软件中的所有错误C.尽可能发现软件系统中的错误9.软件重构关注的是( B )A. 软件体系结构B. 模块细节C.软件性能10.软件项目开发计划的内容有( B )A. 数据分析B.风险分析C.功能分析11.在UML的类图中,描述整体与部分关系的有( B )A.泛化关系B.聚合关系C.依赖关系12.软件过程能力成熟度模型CMM用以评价(A)A.软件过程能力B.组织能力C.学习能力13. 因计算机硬件和软件环境的变化而作出的修改软件的过程称为( C )A. 完善性维护B. 改正性维护C.适应性维护14. 对项目软件而言,软件功能需求信息主要由谁提供( A )A.软件用户B.软件开发人员C.软件项目管理人员15. IDEF0图反映不出(C)A.系统做什么B.系统功能由谁做C.系统如何做16. 原型模型是一种什么开发过程模型(B)A.自顶向上B. 由外至内C.增量式17. 系统流程图描述(A)A.物理系统B.逻辑系统C.软件体系结构18.需求规格说明书的内容不应该包括( C )A.软件确认准则B.软件的性能描述C.算法过程的详细描述19.适合需求模糊或需求不确定系统开发的软件开发模型有( C )A. 瀑布模型B. RAD模型C.原型模型20.UML图中描述系统结构的有( A )A. 组件图B. 顺序图C.状态图21.面向对象方法是一种什么软件开发方法( B )A.层次化B.迭代增量式C.逐步求精22.不可以用来衡量软件可维护性的有()A.可靠性B.可用性C.可行性23. 系统分析员在需求分析最后负责编写()A.用户手册B. 概要设计说明书C.可行性研究报告24.为了提高软件的可靠性、可维护性等而对软件的修改称为()A.改正性维护B.适应性维护C.预防性维护25.在结构化方法中,为使需求改变对软件影响较小,应该使软件结构()A. 与问题结构对应B. 与问题结构独立C.与用户界面对应26.单元测试的计划应该在什么阶段完成()A. 需求分析B. 概要设计C.详细设计27. 下列属面向对象软件开发方法的有()A. LCP方法B. OMT方法C.IDEF0方法28.强调信息隐藏的软件工程设计方法有()A.Jackson方法B.Parnas方法C.SA/SD方法29.描述系统动态行为的模型有()A.包图B.软件结构图C.状态图30.考虑输入条件组合的测试用例设计方法有()A.等价分类法B.语句覆盖法C. 因果图法31. 下列能减少支援性维护活动的有()A.利用软件包B.进行配置管理C.对用户进行适当培训32. 只支持单重继承的程序设计语言有()A.C++B.DelphiC. C33. IDEF0图的顶层图是()A. A0图B.A-0图C.A-1图34. 在UML的用例图中,扩展关系是一种()A. 泛化关系B.依赖关系C.关联关系35.独立测试小组开始介入测试是在()A.模块测试阶段B.集成测试阶段C.确认测试阶段36. 在成本估计中容易低估局部问题的方法是()A. 基于经验模型的估计B. 自底向上估计C. 自顶向下估计37.在IDEF1X图中,如果子实体与父实体存在联系,则子实体将继承父实体的()A.全部属性B.主关键字属性C.非主关键字属性38. 结构化分析方法使用的工具有()A. 数据流图B.类图C.软件结构图39. 白盒测试设计用例的方法是()A. 等价分类法B.基本路径覆盖法C.因果图法40. 在衡量软件质量时,最重要的标准是()A. 可维护性好B. 可用性好C. 满足用户功能需求41. 瀑布模型是一种()A. 演化模型B. 顺序模型C. 增量模型42. 模块的独立程度可以由什么定性标准度量()A. 耦合度B. 复杂度C.可靠性43.以下选项中,不属于对象的特点有()A. 继承B. 多态C. 封闭44. 面向数据结构的设计方法有()A.Parnas方法B.Jackson方法C. IDEF0方法45. 与UML配合最好的软件开发方法是()A.RUP方法B.Coad/Yourdon方法C.IDEF4方法二、填空题:1.统一建模语言UML提供了两种描述整体/部分关系的方法,分别是和。

中南大学软件体系结构实验五解读

中南大学软件体系结构实验五解读

实验5 结构型和行为型设计模式实验实验学时: 2每组人数: 1实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)实验要求: 1 (1:必修2:选修3:其它)实验类别: 3 (1:基础2:专业基础3:专业4:其它)一、实验目的熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的结构型和行为型设计模式,包括代理模式、职责链模式和命令模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容1. 在某应用软件中需要记录业务方法的调用日志,在不修改现有业务类的基础上为每一个类提供一个日志记录代理类,在代理类中输出日志,例如在业务方法method()调用之前输出“方法method()被调用,调用时间为2014-11-5 10:10:10”,调用之后如果没有抛异常则输出“方法method()调用成功”,否则输出“方法method()调用失败”。

在代理类中调用真实业务类的业务方法,使用代理模式设计该日志记录模块的结构,绘制类软图并编程模拟实现。

2. 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需求如下:(1) 在进行商务信息查询之前用户需要通过身份验证,只有合法用户才能够使用该查询系统;(2) 在进行商务信息查询时系统需要记录查询日志,以便根据查询次数收取查询费用。

该软件公司开发人员已完成了商务信息查询模块的开发任务,现希望能够以一种松耦合的方式向原有系统增加身份验证和日志记录功能,客户端代码可以无区别地对待原始的商务信息查询模块和增加新功能之后的商务信息查询模块,而且可能在将来还要在该信息查询模块中增加一些新的功能。

试使用代理模式设计并编程模拟实现该收费商务信息查询系统。

【提示:使用保护代理和智能引用代理】3. 某企业的SCM(Supply Chain Management,供应链管理)系统中包含一个采购审批子系统。

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

实验6 行为型设计模式实验
实验学时: 2
每组人数: 1
实验类型: 3 (1:基础性2:综合性3:设计性4:研究性)
实验要求: 1 (1:必修2:选修3:其它)
实验类别: 3 (1:基础2:专业基础3:专业4:其它)
一、实验目的
熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的行为型设计模式,包括观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式。

二、实验内容
1. 某实时在线股票软件需要提供如下功能:当股票购买者所购买的某支股票价格变化幅度达到5%时,系统将自动发送通知(包括新价格)给购买该股票的所有股民。

试使用观察者模式设计并实现该系统,要求绘制相应的类图并编程模拟实现。

2. 某公司欲开发一套机房监控系统,如果机房达到某一指定温度,温度传感器(Thermosensor)将自动传递信号给各种响应设备,例如警示灯(CautionLight)将闪烁(flicker())、报警器(Annunciator)将发出警报(alarm())、安全逃生门(SecurityDoor)将自动开启(open())、隔热门(InsulatedDoor)将自动关闭(close())等,每一种响应设备的行为由专门的程序来控制。

为了将来能够方便地引入新类型的响应设备,采用观察者模式和适配器模式设计并模拟实现该系统。

3. 某软件公司为某电影院开发了一套影院售票系统,在该系统中需要为不同类型的用户提供不同的电影票(MovieTicket)打折(Discount)方式,具体打折方案如下:
(1) 学生凭学生证可享受票价8折优惠;
(2) 年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元);
(3) 影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

该系统在将来可能还要根据需要引入新的打折方式。

试使用策略模式设计并编程模拟实现该影院售票系统。

4. 某软件公司欲开发一款飞机模拟系统,该系统主要模拟不同种类飞机的飞行特征与起飞特征,需要模拟的飞机种类及其特征如表1所示:
表1 飞机种类及特征一览表
为将来能够模拟更多种类的飞机,试采用策略模式设计并模拟实现该飞机模拟系统。

三、实验要求
1. 结合实例,正确无误地绘制观察者模式和策略模式的模式结构图;
2. 使用任意一种面向对象编程语言实现观察者模式和策略模式实例,代码运行正确无误。

四、实验步骤
1. 结合实例,使用PowerDesigner绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;
2. 结合实例,使用PowerDesigner绘制观察者模式实例结构图并用面向对象编程语言实现该模式实例;
3. 结合实例,使用PowerDesigner绘制策略模式实例结构图并用面向对象编程语言实现该模式实例;
4. 结合实例,使用PowerDesigner绘制策略模式实例结构图并用面向对象编程语言实现该模式实例。

五、实验结果
1. 类图:
实现代码:
public class Client {
public static void main(String args[]){
SharesSubject share1 = new ConcreteShares(100);
Invester observer1 = new Invester("张三");
Invester observer2 = new Invester("李四");
share1.addInvester(observer1);
share1.addInvester(observer2);
share1.change();
}
}
/*********************************************************************** * Module: ConcreteShares.java
* Author: ct
* Purpose: Defines the Class ConcreteShares
***********************************************************************/ import java.util.*;
/** @pdOid 03891fd5-7c63-4b84-9bbf-2430332d48d2 */
public class ConcreteShares extends SharesSubject {
/** @pdOid ab879b87-ee8a-4265-93ea-a9f2ef3b54d9 */
2. 类图:实现代码:
3. 类图:
实现代码:
/***********************************************************************
* Module: ChildrenDiscount.java
* Author: ct
* Purpose: Defines the Class ChildrenDiscount
***********************************************************************/ import java.util.*;
/** @pdOid 40bf41f9-236d-421e-a4cb-c28e520efd0d */
public class ChildrenDiscount implements Discount {
/** @pdOid 9832b602-b5e6-4fdf-9eef-b823cfcaafc0 */
public void discount() {
// TODO: implement
System.out.println("年龄在10周岁及以下的儿童可享受每张票减免10元的优惠(原始票价需大于等于20元)");
}
}
public class Client {
public static void main(String [] args){
MovieTicket movieTicket = new MovieTicket();
}
/***********************************************************************
* Module: VIPDiscount.java
* Author: ct
* Purpose: Defines the Class VIPDiscount
***********************************************************************/ import java.util.*;
/** @pdOid 716e64ca-a980-4447-a5a2-78ff105cb655 */
public class VIPDiscount implements Discount {
/** @pdOid 06f01557-deff-4917-b797-7b3625ba65a7 */
public void discount() {
// TODO: implement
System.out.println("影院VIP用户除享受票价半价优惠外还可进行积分,积分累计到一定额度可换取电影院赠送的奖品。

");
}
}
4. 类图:
实现代码:
/***********************************************************************
六、实验小结
本次实验完成了观察者模式和策略模式的内容,很有收获。

观察者模式对于一定阶段的触发有显著效果,而策略模式则主要是方法的分离,减轻一个类的职责。

相关文档
最新文档