版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数学与计算机学院实验报告(20/ 20 学年第 学期)课程名称软件设计模式课程代码6014859实验时间年月日指导单位西华大学数学与计算机学院软件工程系指导教师学生姓名年级2012 级学号专 业软件工程成绩实验名称行为型模式实验-1实验地点6a-418实验类型实验学时2学时实验日期2014-12-7实验目的和要求实验目的:理解行为型模式在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类; 象的结构,而且重点关注它们之间的相互作用。理解并掌握行为型模式分为类行为型模式和对象行 模式两种。掌握职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观3 模式、状态模式、策
2、略模式、模板方法模式、访问者模式等模式的定义、结构和应用。实验要求:完成给出的模式模型结构,指出相应的角色;完成相应的代码编写。实验环境(实验设备)NetBeans IDE 8.0实验内容1.猫、狗与老鼠假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫。请使用观察者模式 该过程。实验过程一,相应的角色:主题:Mysubject具体主题:Cat具体的观察者:Mouse,Dog二,Uml类图:注销方法public void detach(MyObserver observer)(observers.remove(observer);public abstract void cr
3、y(); /抽象通知方法MyObserver.java: package猫狗老鼠;public interface MyObserver (public void response();Cat.java:package猫狗老鼠;public class Cat extends MySubject(public void cry()(System.out.println(猫叫!);System.out.println();for(Object obs:observers)(MyObserver)obs).response();Dog.java:package猫狗老鼠;public class D
4、og implements MyObserver(public void response()(System.out.println(狗跟着叫!);Mouse.java:package猫狗老鼠;public class Mouse implements MyObserver(public void response()(System.out.println(老鼠努力逃跑!);猫狗老鼠.java:package猫狗老鼠;public class猫狗老鼠public static void main(String args) ( MySubject subject=new Cat();MyObse
5、rver obs1,obs2,obs3;obs1=new Mouse();obs2=new Mouse();obs3=new Dog();subject.attach(obsl);subject.attach(obs2);subject.attach(obs3);subject.cry();结果截图:2.电视机遥控器电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视彳 不同操作。抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三, 体命令类分别代表三种操作:打开电视机、关闭电视机和切换频道。显然,电视机遥控器就是一个的命令模式应用实例。
6、实验过程一,相应的角色:接收者:Television命令:AbstractCommand具体命令:TVChangeCommand,TVOpenCommand,TVCloseCommand请求者:Controller二,Uml类图:Tel e-visi DJiTVClcs -CzaniHJiitv : TelevisionTVOpenCcmima.nd )Ccnstru TVChangeCommand )+ Tel e-visi DJiTVClcs -CzaniHJiitv : TelevisionTVOpenCcmima.nd )Ccnstru TVChangeCommand )+ Const
7、ru ctor TVCI DseCom m and )+ l mplement ex-ecutE )+open ):void十dose ):vcidl+changeChannel):voidTVChaji e ECcmnaiLtv : TelevisionCm troll s-r:AbstracfcCommand:AbstracfcCommand:Abstra ctCc-mma nddDSreCDmmandchangeCcmimia.n d : AbsiTBctCommand+ Ccnstru ctDT Controller A bsta ctC-D m m a n d cpEnCommand
8、, AbstractConi m a nd d DseCDmms nd. AbstrajctComrnand chs ng eCcmirrtan-+open ()change )()+ main String sirgs|) : void+ main String sirgs|) : void+ encrypt String plain Text) : String三,相应的代码:AbstractCommand.javapackage电视机遥控器;public interface AbstractCommand public void execute();Cipher.javapackage电
9、视机遥控器;public interface Cipher public String encrypt(String plainText);Controller.javapackage电视机遥控器;public class Controller private AbstractCommand openCommand,closeCommand,changeCommand;public Controller(AbstractCommand openCommand,AbstractCommandcloseCommand,AbstractCommand changeCommand)this.openC
10、ommand=openCommand;this.closeCommand=closeCommand;this.changeCommand=changeCommand;public void open()openCommand.execute();public void change()changeCommand.execute();public void close()closeCommand.execute();TVChangeCommand.javapackage电视机遥控器;public class TVChangeCommand implements AbstractCommand p
11、rivate Television tv;public TVChangeCommand()tv = new Television();public void execute()tv.changeChannel();TVCloseCommand.javapackage电视机遥控器;public class TVCloseCommand implements AbstractCommandprivate Television tv;public TVCloseCommand()tv = new Television();public void execute()tv.close();TVOpenC
12、ommand .javapackage电视机遥控器;public class TVOpenCommand implements AbstractCommandprivate Television tv;public TVOpenCommand()tv = new Television();public void execute()tv.open();Television.javapackage电视机遥控器;public class Television public void open()System.out.println(打开电视机!);public void close()System.
13、out.println(关闭电视机!);public void changeChannel()System.out.println(切换电视频道!);电视机遥控器javapackage电视机遥控器;public class电视机遥控器public static void main(String args) AbstractCommand openCommand,closeCommand,changeCommand;openCommand = new TVOpenCommand();closeCommand = new TVCloseCommand();changeCommand = new T
14、VChangeCommand();Controllercontrol=newController(openCommand,closeCommand,changeCommand);control.open();control.change();control.close();运行截图:的由-电视机曷衿嚣【run) 88run:打开韦视机!切揍主拆祝道!是闭电银的!成,构建忌对间:莎)3.排序策略某系统提供了一个用于对数组数据进行操作的类,该类封装了对数组的常见操作, 如查找数组元素、对数组元素进行排序等。现以排序操作为例,使用策略模式设计该数 组操作类,使得客户端可以动态地更换排序算法,可以根据
15、需要选择冒泡排序或选择排 序或插入排序,也能够灵活地增加新的排序算法。实验过程一,相应的角色:策略:Sort具体策略:BubbleSort,InsertionSort,Quicksort,SelectionSort,上下文:ArrayHandler,XMLUtil,ArrayHandler二,Uml类图:EuLBl eSortIns E-rticnSortj - - - -.i4+ lmplEmEnt sort i nt arr|) : intfl+ lmplBmEn s&rt (int aJTIIJ : intQ4 4D-Sort+ sort int sirQ) : intQSeiect i
16、cnSort/ scrtObj+ lmplement sort (int sjt) : intflQui cJcEort+ lmplement sort int sitQ):intfl+sort (int sjt,intp, int r):void+partition inta J,int p. int r) :int+swap int aQ.inti. int j):void+ main String sigsQ) : void三.相应的代码ArrayHandler .java package排序策略; public class ArrayHandler (ArrayHajtil ex-so
17、rtObj : Sort+ SrDrt (int sjtt1): intfl+ SrEtSortObj (SsTt SrortObj) : voidBILLtil+ getBean ) : Objectprivate Sort sortObj;public int sort(int arr)sortObj.sort(arr);return arr;P_, this.sortObj = sortObj;BubbleSort .javapackage排序策略;public class BubbleSort implements Sortpublic int sort(int arr)int len
18、=arr.length;for(int i=0;ilen;i+)for(int j=i+1;jarrj)temp=arrj;arrj=arri;) arrfSystem.out.println(冒泡排序”); return arr;InsertionSort.javapackage排序策略;public class InsertionSort implements Sortpublic int sort(int arr)int len=arr.length;for(int i=1;i0;j-)if(arrj-1temp)arrj=arrj-1;elsebreak;arrj=temp;Syste
19、m.out.println(插入排序”); return arr;QuickSor.javapackage排序策略;public class QuickSort implements Sortpublic int sort(int arr)System.out.println(快速排序);sort(arr,0,arr.length-1); return arr;war,皿,int q=0;if(pr)q=partition(arr,p,r);sort(arr,p,q-1);sort(arr,q+1,r);public int partition(int a, int p, int r)int
20、x=ar;int j=p-1;for(int i=p;i=r-1;i+)if(ai=x)j+;*swap(a,j+1,r);return j+1;public void swap(int a, int i, int j)int t = ai;ai = aj;aj = t;SelectionSort .javapackage排序策略;public class SelectionSort implements Sortpublic int sort(int arr)int len=arr.length;int temp;for(int i=0;ilen;i+)temp=arri;int j;int
21、 samllestLocation=i;for(j=i+1;jlen;j+)if(arrjtemp)temp=arrj;samllestLocation=j;arrsamllestLocation=arri; arri=temp;System.out.println(选择排序”); return arr;Sort .javapackage排序策略;public interface Sort (public abstract int sort(int arr);XMLUtil.javapackage排序策略;import javax.xml.parsers.*;import org.w3c.do
22、m.*;import org.xml.sax.SAXException;import java.io.*;public class XMLUtil (public static Object getBean() try创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File(config.xml);获取包含类名的文本节点NodeList nl = doc.getElementsByTagName(className);Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();/通过类名生成实例对象并将其返回Class c=Class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 苏教版科学小学五年级上册期末测试卷带答案9
- 鼻炎与鼻窦炎的区别、鉴别要点及规范化治疗策略
- 2026经营资产面试题及答案
- 水泵联合运行排水试验方案
- 2026年神经漫游者概念下的AI教育产品规划
- 口腔分诊考试题及答案
- 四年级语文上册期中检测卷(汇编)
- 十五五银发经济崛起:轻量化历史名品出行套装如何满足老年群体高品质户外康养需求
- 深扒智能桌面式香氛机核心技术:超声波雾化与AI算法的融合演进
- 果园暑假果香一夏 - 暑期水果采摘手册
- 雨课堂学堂在线学堂云《明-园境赏析:明代四大胜园 》单元测试考核答案
- 新教材高中语文第六单元第课拿来主义教案部编版必修上册(2025-2026学年)
- 化工厂安全责任制培训课件
- 2025年法官入额遴选政治理论真题及答案
- 2025年上半年生产线工作总结范文
- 海尔冰箱BCD-257DVC使用说明书
- 肥胖患者的麻醉管理一例
- 案件询问室管理制度
- (完整版)《红楼梦》歌曲简谱集
- 劳动教育读本(中职版)专题五学习资料
- 农业领域执行力不足的整改方案
评论
0/150
提交评论