软件开发生命周期与建模-实验报告 桥接 适配器桥接,适配器,仿生机器人,模拟毛笔系统_第1页
软件开发生命周期与建模-实验报告 桥接 适配器桥接,适配器,仿生机器人,模拟毛笔系统_第2页
软件开发生命周期与建模-实验报告 桥接 适配器桥接,适配器,仿生机器人,模拟毛笔系统_第3页
软件开发生命周期与建模-实验报告 桥接 适配器桥接,适配器,仿生机器人,模拟毛笔系统_第4页
软件开发生命周期与建模-实验报告 桥接 适配器桥接,适配器,仿生机器人,模拟毛笔系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、附:实验报告格式信息与管理科学学院计算机科学系实验报告课程名称: 软件开发生命周期与建模 实验名称: 【实验3】适配器设计模式(仿生机器人) -10姓 名: 杨现阳,张泽浩,张金庚,张俊超,杨波,王秋波 组号: 3 班级:2014级计应4班 指导教师: 张 浩 实 验 室: 兰亭机房2 日 期: 2016年05月25日一、实验目的 适配器模式(Adapter Pattern) 是将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。通过适配器设计模式实验,掌握适配器设计模式是如何使得接口不兼容而不能交互的类可以一起工

2、作,理解适配器模式的优点:将目标类和适配者类解耦,通过引入一个适配器类来重用现有的适配者类,而无须修改原有代码;增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性;灵活性和扩展性都非常好,通过使用配置文件,可以很方便地更换适配器,也可以在不修改原有代码的基础上增加新的适配器类,完全符合“开闭原则”。二、实验环境一台PC机,所需软件Win7/10、UML工具(Rose/Visio/EclipseUML/ StartUML/)、Eclipse/MyEclipse、JDK6.0等。三、实验内容 仿生机器人:现需要设计一个可以模拟各种动物行为的机

3、器人,在机器人中定义了一系列方法,如机器人叫喊方法cry( )、机器人移动方法move( )等。如果希望在不修改已有代码的基础上使得机器人能够像狗一样叫wangWang( ),像狗一样跑dogRun( ),像猫一样的叫miaoMiao( ),像猫一样的跑catRun( )。请使用类适配器模式和对象适配器模式分别进行系统设计,使得机器人能够仿生狗和猫等各类不同动物的叫和跑。四、实验操作过程 1分析得出仿生机器人的目标对象和被适配对象。目标对象:机器人被适配对象:狗2用类适配器模式对仿生机器人进行适配,定义目标对象接口和被适配对象类。目标对象接口:Robotpublic interface Rob

4、ot public void cry(); public void move();被适配对象类:Dogimport javax.swing.JOptionPane;public class Dog public void wang() JOptionPane.showMessageDialog(null, "狗在汪汪叫!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1); public void run() JOptionPane.showMessageDialog(null, "狗在奔跑!","

5、14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1); 3用类适配器模式对仿生机器人进行适配,定义适配器类,实现目标对象接口和继承被适配对象类。适配器(Adaper)角色:DogAdapterpublic class DogAdapter extends Dog implements Robot public void cry() wang(); public void move() run();4 给出通用的类适配模式结构,并进行角色说明。目标(Target)角色:这就是所期待得到的接口。源(Adaptee)角色:现在需要适配的接口。适配器(Adapter)角色

6、:适配器类是本模式的核心。适配器把源接口转换成目标接口。显然,这一角色不可以是接口,而必须是具体类。5用对象类适配器模式对仿生机器人进行适配,定义目标对象类和被适配对象类。目标对象类:Robot package 对象适配器;public abstract class Robot public abstract void cry();public abstract void move();被适配对象类:Dog package 对象适配器;import javax.swing.JOptionPane;public class Dog public void wang() JOptionPane.s

7、howMessageDialog(null, "狗在汪汪叫!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1); public void run() JOptionPane.showMessageDialog(null, "狗在奔跑!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1); 6用对象适配器模式对仿生机器人进行适配,定义适配器类,继承目标对象类和聚合被适配对象类。适配器(Adaper)角色:DogAdapterpackage 对象适配器;public

8、 class DogAdapter extends Robot Dog dog=new Dog();public void cry() dog.wang(); public void move() dog.run();7给出通用的对象适配模式结构,并进行角色说明。目标(Target)角色:Target。源(Adaptee)角色:Adaptee。适配器(Adapter)角色:Adapter8. 课后自测与练习:理解和掌握默认适配器模式、双向适配器默认适配器模式(Default Adapter Pattern)或缺省适配器模式 当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接

9、口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可有选择地覆盖父类的某些方法来实现需求,它适用于一个接口不想使用其所有的方法的情况。因此也称为单接口适配器模式。 双向适配器 在对象适配器的使用过程中,如果在适配器中同时包含对目标类和适配者类的引用,适配者可以通过它调用目标类中的方法,目标类也可以通过它调用适配者类中的方法,那么该适配器就是一个双向适配器。 五、核心代码与实验结果 核心代码:package 对象适配器;public class Client public static void main(String args) Robot da=new DogAdapter(); d

10、a.cry(); da.move();运行结果: 六、心得体会 类适配器使用对象继承的方式,是静态的定义方式;而对象适配器使用对象组合的方式,是动态组合的方式。对于类适配器,由于适配器直接继承了Adaptee,使得适配器不能和Adaptee的子类一起工作,因为继承是静态的关系,当适配器继承了Adaptee后,就不可能再去处理  Adaptee的子类了。对于对象适配器,一个适配器可以把多种不同的源适配到同一个目标。换言之,同一个适配器可以把源类和它的子类都适配到目标接口。因为对象适配器采用的是对象组合的关系,只要对象类型正确,是不是子类都无所谓。  对于类适配器,适配器可以重

11、定义Adaptee的部分行为,相当于子类覆盖父类的部分实现方法。 对于对象适配器,要重定义Adaptee的行为比较困难,这种情况下,需要定义Adaptee的子类来实现重定义,然后让适配器组合子类。虽然重定义Adaptee的行为比较困难,但是想要增加一些新的行为则方便的很,而且新增加的行为可同时适用于所有的源。对于类适配器,仅仅引入了一个对象,并不需要额外的引用来间接得到Adaptee。 对于对象适配器,需要额外的引用来间接得到Adaptee。建议尽量使用对象适配器的实现方式,多用合成/聚合、少用继承。当然,具体问题具体分析,根据需要来选用实现方式,最适合的才是最好的。适配器模式的优点·

12、; 更好的复用性系统需要使用现有的类,而此类的接口不符合系统的需要。那么通过适配器模式就可以让这些功能得到更好的复用。· 更好的扩展性在实现适配器功能的时候,可以调用自己开发的功能,从而自然地扩展系统的功能。适配器模式的缺点过多的使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是A接口,其实内部被适配成了B接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。 七、组内打分组号姓名学号班级作业成绩(百分制)3杨现阳1410208124计应四班 90张泽浩1410208127计应四班90张

13、金庚1410208125计应四班80张俊超1410208126计应四班80杨 波1410208123计应四班80王秋波1410208122计应四班80八、指导教师评分注:纸质版实验报告编辑后打印,以组为单位交给学习委员,以班为单位交给老师成绩: (百分制)指导教师: 张 浩 信息与管理科学学院计算机科学系实验报告课程名称: 软件开发生命周期与建模 实验名称: 【实验4】桥接模式(模拟毛笔系统) -2姓 名: 杨现阳,张泽浩,张金庚,张俊超,杨波,王秋波 组号: 3 班级:2014级计应4班 指导教师: 张 浩 实 验 室: 兰亭机房2 日 期: 2016年05月25日一、实验目的 桥接模式(B

14、ridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为接口(Interface)模式。了解桥接模式的结构与四类角色,掌握桥接模式结构的实际应用。通过桥接模式实验,进一步理解桥接模式是如何分离抽象接口及其实现部分,是如何实现细节对客户透明,以及如何利用合成复用原则实现比继承方案更好的灵活性与扩展性,进而体会桥接模式的优点。二、实验环境一台PC机,所需软件Win2003/XP、UML工具(Rose/Visio/EclipseUML/ StartUML/)、Eclipse/MyEclipse、JDK6.0等。三、实验内容 模拟毛笔系统:现需

15、要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。请分别使用继承方案和桥接模式来模拟毛笔的使用过程。四、实验操作过程 1利用继承方案模拟毛笔写字,写出不同大中小号、不同颜色的内容。继承方式中每一种大小和颜色的画笔,都需要一个具体的画笔类,一共要写15个画笔类;先定义一个接口Pen然后让SmallPen,BigPen,MiddlePen分别实现Pen,再让不同颜色,不同大小的画笔分别继承SmallPen,BigPe

16、n,MiddlePen;核心类代码:public interface Pen public void bepaint();public class SmallPen implements Pen public void bepaint() public class BigPen implements Pen public void bepaint() public class MiddlePen implements Pen public void bepaint() public class Client public static void main(String args) Pen p1

17、,p2,p3,p4,p5; p1=new BigPenRed(); p1.bepaint(); p2=new BigPenBlue(); p2.bepaint(); p3=new SmallPenBlack(); p3.bepaint(); p4=new SmallPenWhite(); p4.bepaint(); p5=new MiddlePenGreen(); p5.bepaint();2利用桥接模式(即合成复用方案或组合/聚合方案)模拟毛笔写字,写出不同大中小号、不同颜色的内容。类代码:public interface Color public void bepaint(String p

18、enType,String name);public class Black implements Color public void bepaint(String penType, String name) JOptionPane.showMessageDialog(null, "使用"+penType+name+"毛笔!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1);public class Blue implements Color public void bepaint(String penTy

19、pe, String name) JOptionPane.showMessageDialog(null, "使用"+penType+name+"毛笔!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1);public class Green implements Color public void bepaint(String penType, String name) JOptionPane.showMessageDialog(null, "使用"+penType+name+"

20、毛笔!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1);public class Red implements Color public void bepaint(String penType, String name) JOptionPane.showMessageDialog(null, "使用"+penType+name+"毛笔!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1);public class White implements C

21、olor public void bepaint(String penType, String name) JOptionPane.showMessageDialog(null, "使用"+penType+name+"毛笔!","14计应四班第三组 杨现阳,张金庚,张俊超,张泽浩,杨波,王秋波",1);public abstract class Pen protected Color color; public void setColor(Color color) this.color=color; public abstract v

22、oid draw(String name);public class SmallPen extends Pen public void draw(String name) color.bepaint("小号", name); public class BigPen extends Pen public void draw(String name) color.bepaint("大号", name);public class MiddlePen extends Pen public void draw(String name) color.bepaint(

23、"中号", name); 3给出通用的桥接模式结构,并进行角色说明。1. 抽象化(Abstraction)角色:抽象类的接口,并保存一个对实现化对象的引用。 2. 修正抽象化(Refined Abstraction)角色:扩充了Abstraction定义的接口,加强或者修正了父类对抽象化的定义。 3. 实 现化(Implementor)角色:定义实现类的接口,该接口不一定要与Abstraction的接口一致,事实上这两个接口可以完全不同。一般来 说,Implementor接口仅定义提供了底层的基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作,理解这

24、点很关键哦!总 结一点就是,抽象化与实现化角色之间并不存在继承与实现的关系,两者之间只是存在一种委托的关系而已。 4. 具体实现化(ConcreteImplementor)角色:实现了所有实现化角色所定义的接口。 4. 用文字描述下列例子中适配器模式与桥接模式的联用在适配器模式中:目标(Target)角色:数据采集。源(Adaptee)角色:Excel API。适配器(Adapter)角色:读取Excel文件。在桥接模式中:抽象化(Abstraction)角色:报表显示。修正抽象化(Refined Abstraction)角色:报表显示方式1,报表显示方式2 。实 现化(Implementor

25、)角色:数据采集。 具体实现化(ConcreteImplementor)角色:读取文本文件,读取数据库。五、核心代码与实验结果核心代码:public class Client public static void main(String args) Pen p1,p2;Color c1,c2,c3;p1=new SmallPen();p2=new MiddlePen();c1=new Red();c2=new Green();c3=new Blue(); p1.setColor(c1); p1.draw("红色"); p2.setColor(c3); p2.draw("蓝色"); p2.setColor(c2); p2.draw("绿色");运行结果: 六、心得体会效

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论