版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息与管理科学学院计算机科学系试验汇报课程名称:软件开发生命周期与建模试验名称:【试验3】适配器设计模式(仿生机器人)一、试验目标适配器模式(AdapterPattern)是将一个接口转换成客户希望另一个接口,使接口不兼容那些类能够一起工作。适配器模式既能够作为类结构型模式,也能够作为对象结构型模式。经过适配器设计模式试验,掌握适配器设计模式是怎样使得接口不兼容而不能交互类能够一起工作,了解适配器模式优点:将目标类和适配者类解耦,经过引入一个适配器类来重用现有适配者类,而无须修改原有代码;增加了类透明性和复用性,将详细实现封装在适配者类中,对于客户端类来说是透明,而且提升了适配者复用性;灵活性和扩展性都非常好,经过使用配置文件,能够很方便地更换适配器,也能够在不修改原有代码基础上增加新适配器类,完全符合“开闭标准”。二、试验环境一台PC机,所需软件Win7/10、UML工具(Rose/Visio/EclipseUML/StartUML/)、Eclipse/MyEclipse、JDK6.0等。三、试验内容仿生机器人:现需要设计一个能够模拟各种动物行为机器人,在机器人中定义了一系列方法,如机器人叫喊方法cry()、机器人移动方法move()等。假如希望在不修改已经有代码基础上使得机器人能够像狗一样叫wangWang(),像狗一样跑dogRun(),像猫一样叫miaoMiao(),像猫一样跑catRun()。请使用类适配器模式和对象适配器模式分别进行系统设计,使得机器人能够仿生狗和猫等各类不一样动物叫和跑。四、试验操作过程1.分析得出仿生机器人目标对象和被适配对象。Robot是一个抽象类,详细Adaptor类实RobotAdaptor类,它申明了一个私有_myAdaptee字段,其类型为AnimalAdaptee。目标对象是RobotAdaptor,被适配对象是AnimalAdaptee。usingSystem;usingSystem.Collections.Generic;usingSystem.Ling;usingSystem.Text;usingSystem.Threading.Tasks;namespaceRobotAdaptor{//机器人类abstractpublicclassRobot{abstractpublicvoidRobotCry();abstractpublicvoidRobotMove();abstractpublicvoidSetAdptee(objectValue);//这么申明带有一个参数抽象方法。}//抽象AdapteePublicclassAnimalAdaptee{publicvirtualvoidCry{}PublicvirtualvoidMove{}}2.用类适配器模式对仿生机器人进行适配,定义目标对象接口和被适配对象类。【组内补充说明】文字描述、类图、类代码用一个详细Adapter类对Adaptee和Robot进行匹配。结果是当我们想要匹配一个类以及全部它子类时,类Adapter将不能胜任工作,使得Adapter能够重定义Adaptee部分行为,因为Adapter是Adaptee一个子类。仅仅引入了一个对象,并不需要额外指针以间接得到adaptee。3.用类适配器模式对仿生机器人进行适配,定义适配器类,实现目标对象接口和继承被适配对象类。//适配器类AdaptorPublicclassRobotAdapptor:Robot{PrivateAnimalAdapptee_myAdaptee;PublicAnimalAdapteeMyAdaptee{Get{returnmyAdaptee;}Set{_myAdaptee=value;}}PublicoverridevoidSetAdaptee(ObjectValue){myAdaptee=(AnimalAdaptee)Value;}PublicoverridevoidRobotCry(){//thrownewNotImplementedException();If(myAdaptee==null)_myAdaptee=newAnimalAdaptee();_myAdaptee.Cry;}PublicoverridvoidRobotMove()
{//thrownewNotImplementedException();If(myAdaptee==null)_myAdaptee=newAnimalAdaptee();_myAdaptee.Move;}4.给出通用类适配模式结构,并进行角色说明。5.用对象类适配器模式对仿生机器人进行适配,定义目标对象类和被适配对象类。允许一个Adapter与多个Adaptee—即Adaptee本身以及它全部子类(假如有子类话)—同时工作。Adapter也能够一次给全部Adaptee添加功效。6.用对象适配器模式对仿生机器人进行适配,定义适配器类,继承目标对象类和聚合被适配对象类。PublicclassDogAdaptee:AnmialAdaptee{PublicoverridvoidCry(){//base.Cry();Console.WriteLine(“这是狗叫:汪汪汪!”);}PublicoverridevoidMove(){//base.Move();Console.WriteLine(“这是狗跳:跳跳跳!”);}}//鸟PublicclassBirdAdaptee:AnimalAdaptee{PublicpverridvoidCry(){//base.Cry();Console.WriteLine(“这是鸟叫:叽叽叽!”);}PublicoverridevoidMove(){//base.Move();Console.WriteLine(“这是鸟飞:快快飞!”);}}7.给出通用对象适配模式结构,并进行角色说明。8.课后自测与练习:了解和掌握默认适配器模式、双向适配器当你想实现一个接口但又不想实现全部接口方法,只想去实现一部分方法时,就用中默认适配器模式。双向适配器类Adapter,它对要适配双方都采取公共方式继承,从而达成双向适配效果。五、关键代码与试验结果关系图:代码:usingSystem; usingSystem.Collections.Generic;usingSystem.Ling;usingSystem.Text;usingSystem.Threading.Tasks;namespaceRobotAdaptor{//机器人类abstractpublicclassRobot{abstractpublicvoidRobotCry();abstractpublicvoidRobotMove();abstractpublicvoidSetAdptee(objectValue);//这么申明带有一个参数抽象方法。}//抽象AdapteePublicclassAnimalAdaptee{publicvirtualvoidCry{}PublicvirtualvoidMove{}}/PublicclassDogAdaptee:AnmialAdaptee{PublicoverridvoidCry(){//base.Cry();Console.WriteLine(“这是狗叫:汪汪汪!”);}PublicoverridevoidMove(){//base.Move();Console.WriteLine(“这是狗跳:跳跳跳!”);}}//鸟PublicclassBirdAdaptee:AnimalAdaptee{PublicpverridvoidCry(){//base.Cry();Console.WriteLine(“这是鸟叫:叽叽叽!”);}PublicoverridevoidMove(){//base.Move();Console.WriteLine(“这是鸟飞:快快飞!”);}}//适配器类AdaptorPublicclassRobotAdapptor:Robot{PrivateAnimalAdapptee_myAdaptee;PublicAnimalAdapteeMyAdaptee{Get{returnmyAdaptee;}Set{_myAdaptee=value;}}PublicoverridevoidSetAdaptee(ObjectValue){myAdaptee=(AnimalAdaptee)Value;}PublicoverridevoidRobotCry(){//thrownewNotImplementedException();If(myAdaptee==null)_myAdaptee=newAnimalAdaptee();_myAdaptee.Cry;}PublicoverridvoidRobotMove()
{//thrownewNotImplementedException();If(myAdaptee==null)_myAdaptee=newAnimalAdaptee();_myAdaptee.Move;}}ClassProgram{StaticvoidMain(String[]args){RobotMyRobot=newRobotAdaptee();AnimalAdapteedogAdaptee=newDogAdaptee();MyRobot.SetAdaptee(dogAdaptee);MyAdaptee.RobotCry();MyAdaptee.RobotMove();//申明为第二种鸟类AnimalAdapteebirdAdaptee=newbirdAdaptee();MyRobot.SetAdaptee(birdAdaptee);MyAdaptee.RobotCry();MyAdaptee.RobotMove();Console.ReadKey();}}}结果截图:六、心得体会周汝月,周艳洁负责写代码,测试代码,运行结果丁胜东,司向向负责写试验汇报张磊,王卓然负责打印试验汇报,最终任务完成是组内组员齐心协力结果,在这个过程中我们也有一些不足,不过请教他人后最终完成任务七、组内打分组号姓名学号班级作业成绩
(百分制)丁胜东14计应6班90司向向14计应6班90周汝月14计应6班95周艳洁14计应6班95王卓然14计应6班90张磊14计应6班90八、指导教师评分注:纸质版试验汇报编辑后打印,以组为单位交给学习委员,以班为单位交给老师注:纸质版试验汇报编辑后打印,以组为单位交给学习委员,以班为单位交给老师成绩: (百分制)指导教师: 张浩信息与管理科学学院计算机科学系试验汇报课程名称:软件开发生命周期与建模试验名称:【试验4】桥接模式(模拟毛笔系统)姓名:周艳洁、周汝月、司向向、丁胜东、张磊、王卓然组号:3班级:14级计应6班指导教师:张浩实验室:兰亭机房2日期:05月26日一、试验目标桥接模式(BridgePattern):将抽象部分与它实现部分分离,使它们都能够独立地改变。它是一个对象结构型模式,又称为接口(Interface)模式。了解桥接模式结构与四类角色,掌握桥接模式结构实际应用。经过桥接模式试验,深入了解桥接模式是怎样分离抽象接口及其实现部分,是怎样实现细节对客户透明,以及怎样利用合成复用标准实现比继承方案愈加好灵活性与扩展性,进而体会桥接模式优点。二、试验环境一台PC机,所需软件Win/XP、UML工具(Rose/Visio/EclipseUML/StartUML/)、Eclipse/MyEclipse、JDK6.0等。三、试验内容模拟毛笔系统:现需要提供大中小3种型号画笔,能够绘制5种不一样颜色,假如使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个详细蜡笔类。而假如使用毛笔话,只需要3种型号毛笔,外加5个颜料盒,用3+5=8个类就能够实现15支蜡笔功效。请分别使用继承方案和桥接模式来模拟毛笔使用过程。四、试验操作过程1.利用继承方案模拟毛笔写字,写出不一样大中小号、不一样颜色内容。public
void
draw(String
name)
{
color.bepaint(String
penType
,
String
name);
}
}public
class
MiddlePen
extends
Pen
{
public
void
draw(String
name)
{
color.bepaint(String
penType
,
String
name);
}
}public
void
draw(String
name)
{
color.bepaint(String
penType
,
String
name);
}
}
public
class
Red
implements
Color
{
public
void
bepaint(String
penType
,
String
name);
}
{
public
void
bepaint(String
penType
,
String
name);
}
{
public
void
bepaint(String
penType
,
String
name);
}
public
class
White
implements
Color{public
void
bepaint(String
penType
,
String
name);
}
{
public
void
bepaint(String
penType
,
String
name);
}2.利用桥接模式(即合成复用方案或组合/聚合方案)模拟毛笔写字,写出不一样大中小号、不一样颜色内容。{
}{
Protected
Color
color;Color
color{
this.=}
public
abstract
void
draw(String
name);
}
3.给出通用桥接模式结构,并进行角色说明。 抽象化角色:抽象化给出定义,并保留一个对实现化对象引用。修正抽象化角色:扩展抽象化角色,改变和修正父类对抽象化定义。
实现化角色:这个角色给出实现化角色接口,但不给出详细实现。必须指出是,这个接口不一定和抽象化角色接口定义相同,实际上,这两个接口能够非常不一样。实现化角色应该只给出底层操作,而抽象化角色应该只给出基于底层操作更高一层操作。
详细实现化角色:这个角色给出实现化角色接口详细实现。4.用文字描述以下例子中适配器模式与桥接模式联用这种情况经常出现在需要其余系统提供实现方法时,一个经典例子是工业控
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水弹性城市道路绿化施工技术规范征求意见稿
- 上海市市辖区(2024年-2025年小学五年级语文)统编版期末考试(上学期)试卷及答案
- 上海市县(2024年-2025年小学五年级语文)统编版期中考试(上学期)试卷及答案
- 荆楚理工学院《习近平总书记关于教育的重要论述研究》2023-2024学年第一学期期末试卷
- 电冰箱、空调器安装与维护电子教案 1.3 拆装空调器
- 湖南省长沙市宁乡市西部乡镇2024-2025学年二年级上学期11月期中数学试题
- DB11T 1125-2014 实验动物笼器具
- 第4章《一元一次方程》-2024-2025学年七年级数学上册单元测试卷(苏科版2024新教材)
- 同轴继电器市场需求与消费特点分析
- 关节镜市场发展预测和趋势分析
- 群文阅读讲座课件
- 汉语拼音教学讲座课件
- 各种样式聘书模板范本
- H3C ONEStor存储技术白皮书
- 重大事故隐患治理方案-
- 核医学-骨髓显像
- 六年级上册数学课件-3.6 分数连除和乘除混合运算丨苏教版 (共15张PPT)
- 人工血管动静脉内瘘术后护理课件
- 图书公司仓储物流管理制度及流程
- 新三板知识测评答案
- 危险化学品MSDS(氮气)
评论
0/150
提交评论