《设计模式十四.docx》由会员分享,可在线阅读,更多相关《设计模式十四.docx(23页珍藏版)》请在三一办公上搜索。
1、精选优质文档-倾情为你奉上一实验目的1. 熟悉UML统一建模语言;2. 回顾熟悉适配器模式、桥接模式、组合、装饰模式;3. 熟悉XML文件的操作;4. 熟悉java的反射机制。二实验内容(1)使用Java语言实现一个双向适配器实例,使得猫可以学狗叫,狗可以学猫抓老鼠。(2)某日志记录器(Logger)既可以支持不同的操作系统,还可以支持多种编程语言,并且可以使用不同的输出方式。使用桥接模式设计该系统。(3)使用组合设计模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、
2、图片文件ImageFile、视频文件VideoFile。(4)某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。使用装饰模式设计该系统。三实验环境PC微机;Windows 操作系统;Visual Studio 程序集成环境。四 实验内容(1) 使用Java语言实现一个双向适配器实例,使得猫可以学狗叫,狗可以学猫抓老鼠。ArealCat.javapackage 设计模式实验十四周_1;public class ArealCat implements Catpublic
3、 void catlooks()System.out.println(I am a real cat,I have a real catlooks.);public void zhuoshu()System.out.println(I am a real cat,I have can catch a mouse.);ArealDog.javapackage 设计模式实验十四周_1;public class ArealDog implements Dog public void doglooks()System.out.println(I am a real dog,I have a real
4、doglooks.);public void bark()System.out.println(I am a real dog,I have bark.);Cat.javapackage 设计模式实验十四周_1;public interface Cat public void catlooks();public void zhuoshu();CDAdapter.javapackage 设计模式实验十四周_1;public class CDAdapter implements Cat,DogCat cat=null;public CDAdapter(Cat cat)this.cat=cat;pu
5、blic void doglooks()System.out.println(I am a dog,too.);public void bark()cat.zhuoshu();Dog dog=null;public CDAdapter(Dog dog)this.dog=dog;public void catlooks()System.out.println(I am a cat,too);public void zhuoshu()dog.bark();Dog.javapackage 设计模式实验十四周_1;public interface Dog public void doglooks();
6、public void bark();Client.javapackage 设计模式实验十四周_1;public class Client public static void main(String args)Cat AFakeCat =new CDAdapter(new ArealDog();AFakeCat.catlooks();AFakeCat.zhuoshu();Dog AFakeDog=new CDAdapter(new ArealCat();AFakeDog.doglooks();AFakeDog.bark();UML.java实验结果:(2) 某日志记录器(Logger)既可以
7、支持不同的操作系统,还可以支持多种编程语言,并且可以使用不同的输出方式。使用桥接模式设计该系统。Logger.javapackage 设计模式实验十四周_2;public class Logger protected Language language;protected OperationSystem operationSystem;public Language getLanguage()return language;public OperationSystem getOperationSystem()return operationSystem;public void setLangu
8、age(Language language)this.language=language;public void setOperationSystem(OperationSystem operationSystem)this.operationSystem=operationSystem;public void output()System.out.println(输出Logger.);Consolelog.javapackage 设计模式实验十四周_2;public class Consolelog extends Loggerpublic void output()System.out.p
9、rintln(用+operationSystem.Output()+操作系统,+language.Output()+编写,输出Consolelog.);Filelog.javapackage 设计模式实验十四周_2;public class Filelog extends Loggerpublic void output()System.out.println(用+operationSystem.Output()+操作系统,+language.Output()+编写,输出Filelog.);XMLlog.javapackage 设计模式实验十四周_2;public class XMLlog e
10、xtends Loggerpublic void output()System.out.println(用+operationSystem.Output()+操作系统,+language.Output()+编写,输出XMLlog.);OperationSystem.javapackage 设计模式实验十四周_2;public abstract class OperationSystem public abstract String Output();Linux.javapackage 设计模式实验十四周_2;public class Linux extends OperationSystemp
11、ublic String Output()return Linux;Unix.javapackage 设计模式实验十四周_2;public class Unix extends OperationSystempublic String Output()return Unix;Windows.javapackage 设计模式实验十四周_2;public class Windows extends OperationSystempublic String Output()return Windows;Language.javapackage 设计模式实验十四周_2;public abstract
12、class Language public abstract String Output();Cyuyan.javapackage 设计模式实验十四周_2;public class Cyuyan extends Languagepublic String Output()return C语言;Pascal.javapackage 设计模式实验十四周_2;public class Pascal extends Languagepublic String Output()return Pascal;Java.javapackage 设计模式实验十四周_2;public class Java ext
13、ends Languagepublic String Output()return Java;Client.javapackage 设计模式实验十四周_2;public class Client public static void main(String args)Cyuyan cyuyan=new Cyuyan();Java java=new Java();Pascal pascal=new Pascal();Linux linux=new Linux();Windows windows=new Windows();Unix unix=new Unix();Consolelog conso
14、lelog=new Consolelog();consolelog.setLanguage(cyuyan);consolelog.setOperationSystem(linux);consolelog.output();Filelog filelog=new Filelog();filelog.setLanguage(java);filelog.setOperationSystem(windows);filelog.output();XMLlog xmllog=new XMLlog();xmllog.setLanguage(pascal);xmllog.setOperationSystem(
15、unix);xmllog.output();UML.java实验结果:(3) 使用组合设计模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。AntiVirus.javapackage 设计模式实验十四周_3;public abstract class AntiVirus public abstract void scan();ImageFile.javapackage 设计模式实验十四周_3;public cla
16、ss ImageFile extends AntiViruspublic void scan()System.out.println(扫描图片文件);TextFile.javapackage 设计模式实验十四周_3;public class TextFile extends AntiViruspublic void scan()System.out.println(扫描文本文件);VideoFile.javapackage 设计模式实验十四周_3;public class VideoFile extends AntiViruspublic void scan()System.out.print
17、ln(扫描视频文件);Folder.javapackage 设计模式实验十四周_3;import java.util.*;public class Folder extends AntiVirusprivate ArrayList list=new ArrayList();public void add(AntiVirus element)list.add(element);public void remove(AntiVirus element)list.remove(element);public void scan()for(Object object:list)(AntiVirus)o
18、bject).scan();Client.javapackage 设计模式实验十四周_3;public class Client public static void main(String a)AntiVirus obj1,obj2,obj3,obj4,obj5;Folder folder1,folder2,folder3;obj1=new ImageFile();obj2=new TextFile();folder1=new Folder();folder1.add(obj1);folder1.add(obj2);obj3=new VideoFile();obj4=new VideoFil
19、e();folder2=new Folder();folder2.add(obj3);folder2.add(obj4);obj5=new ImageFile();folder3=new Folder();folder3.add(folder1);folder3.add(folder2);folder3.add(obj5);folder3.scan();UML.java实验结果:(4)某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。使用装饰模式设计该系统。Book
20、.javapackage 设计模式实验十四周_4;public interface Book public void borrowBook();public void returnBook();Ibook.javapackage 设计模式实验十四周_4;public class Ibook implements Bookpublic void borrowBook()System.out.println(借书!);public void returnBook()System.out.println(还书!);Changer.javapackage 设计模式实验十四周_4;public clas
21、s Changer implements Bookprivate Book book;public Changer(Book book)this.book=book;public void borrowBook()book.borrowBook();public void returnBook()book.returnBook();LoseBook.javapackage 设计模式实验十四周_4;public class LoseBook extends Changerpublic LoseBook(Book book)super(book);public void lose()System.
22、out.println(这本书已经遗失);FreezeBook.javapackage 设计模式实验十四周_4;public class FreezeBook extends Changerpublic FreezeBook(Book book)super(book);public void freeze()System.out.println(这本书已经被冻结);Client.javapackage 设计模式实验十四周_4;public class Client public static void main(String args)Ibook ibook=new Ibook();ibook
23、.borrowBook();ibook.returnBook();System.out.println(-);FreezeBook freezebook=new FreezeBook(ibook);freezebook.borrowBook();freezebook.returnBook();freezebook.freeze();System.out.println(-);LoseBook losebook=new LoseBook(ibook);losebook.borrowBook();losebook.returnBook();losebook.lose();UML.java实验结果:专心-专注-专业