设计模式十四.docx

上传人:b****3 文档编号:26668557 上传时间:2023-06-21 格式:DOCX 页数:17 大小:176.55KB
下载 相关 举报
设计模式十四.docx_第1页
第1页 / 共17页
设计模式十四.docx_第2页
第2页 / 共17页
设计模式十四.docx_第3页
第3页 / 共17页
设计模式十四.docx_第4页
第4页 / 共17页
设计模式十四.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

设计模式十四.docx

《设计模式十四.docx》由会员分享,可在线阅读,更多相关《设计模式十四.docx(17页珍藏版)》请在冰豆网上搜索。

设计模式十四.docx

设计模式十四

一.实验目的

1.熟悉UML统一建模语言;

2.回顾熟悉适配器模式、桥接模式、组合、装饰模式;

3.熟悉XML文件的操作;

4.熟悉java的反射机制。

二.实验内容

(1)使用Java语言实现一个双向适配器实例,使得猫可以学狗叫,狗可以学猫抓老鼠。

(2)某日志记录器(Logger)既可以支持不同的操作系统,还可以支持多种编程语言,并且可以使用不同的输出方式。

使用桥接模式设计该系统。

(3)使用组合设计模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。

(4)某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。

现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。

使用装饰模式设计该系统。

三.实验环境

PC微机;

Windows操作系统;

VisualStudio程序集成环境。

4.实验内容

(1)使用Java语言实现一个双向适配器实例,使得猫可以学狗叫,狗可以学猫抓老鼠。

ArealCat.java

package设计模式实验十四周_1;

publicclassArealCatimplementsCat{

publicvoidcatlooks(){

System.out.println("Iamarealcat,Ihavearealcatlooks.");

}

publicvoidzhuoshu(){

System.out.println("Iamarealcat,Ihavecancatchamouse.");

}

}

ArealDog.java

package设计模式实验十四周_1;

publicclassArealDogimplementsDog{

publicvoiddoglooks(){

System.out.println("Iamarealdog,Ihavearealdoglooks.");

}

publicvoidbark(){

System.out.println("Iamarealdog,Ihavebark.");

}

}

Cat.java

package设计模式实验十四周_1;

publicinterfaceCat{

publicvoidcatlooks();

publicvoidzhuoshu();

}

CDAdapter.java

package设计模式实验十四周_1;

publicclassCDAdapterimplementsCat,Dog{

Catcat=null;

publicCDAdapter(Catcat){

this.cat=cat;

}

publicvoiddoglooks(){

System.out.println("Iamadog,too.");

}

publicvoidbark(){

cat.zhuoshu();

}

Dogdog=null;

publicCDAdapter(Dogdog){

this.dog=dog;

}

publicvoidcatlooks(){

System.out.println("Iamacat,too");

}

publicvoidzhuoshu(){

dog.bark();

}

}

Dog.java

package设计模式实验十四周_1;

publicinterfaceDog{

publicvoiddoglooks();

publicvoidbark();

}

Client.java

package设计模式实验十四周_1;

publicclassClient{

publicstaticvoidmain(String[]args){

CatAFakeCat=newCDAdapter(newArealDog());

AFakeCat.catlooks();

AFakeCat.zhuoshu();

DogAFakeDog=newCDAdapter(newArealCat());

AFakeDog.doglooks();

AFakeDog.bark();

}

}

UML.java

实验结果:

(2)某日志记录器(Logger)既可以支持不同的操作系统,还可以支持多种编程语言,并且可以使用不同的输出方式。

使用桥接模式设计该系统。

Logger.java

package设计模式实验十四周_2;

publicclassLogger{

protectedLanguagelanguage;

protectedOperationSystemoperationSystem;

publicLanguagegetLanguage(){

returnlanguage;

}

publicOperationSystemgetOperationSystem(){

returnoperationSystem;

}

publicvoidsetLanguage(Languagelanguage){

this.language=language;

}

publicvoidsetOperationSystem(OperationSystemoperationSystem){

this.operationSystem=operationSystem;

}

publicvoidoutput(){

System.out.println("输出Logger.");

}

}

Consolelog.java

package设计模式实验十四周_2;

publicclassConsolelogextendsLogger{

publicvoidoutput(){

System.out.println("用"+operationSystem.Output()+"操作系统,"+language.Output()+"编写,输出Consolelog.");

}

}

Filelog.java

package设计模式实验十四周_2;

publicclassFilelogextendsLogger{

publicvoidoutput(){

System.out.println("用"+operationSystem.Output()+"操作系统,"+language.Output()+"编写,输出Filelog.");

}

}

XMLlog.java

package设计模式实验十四周_2;

publicclassXMLlogextendsLogger{

publicvoidoutput(){

System.out.println("用"+operationSystem.Output()+"操作系统,"+language.Output()+"编写,输出XMLlog.");

}

}

OperationSystem.java

package设计模式实验十四周_2;

publicabstractclassOperationSystem{

publicabstractStringOutput();

}

Linux.java

package设计模式实验十四周_2;

publicclassLinuxextendsOperationSystem{

publicStringOutput(){

return"Linux";

}

}

Unix.java

package设计模式实验十四周_2;

publicclassUnixextendsOperationSystem{

publicStringOutput(){

return"Unix";

}

}

Windows.java

package设计模式实验十四周_2;

publicclassWindowsextendsOperationSystem{

publicStringOutput(){

return"Windows";

}

}

Language.java

package设计模式实验十四周_2;

publicabstractclassLanguage{

publicabstractStringOutput();

}

Cyuyan.java

package设计模式实验十四周_2;

publicclassCyuyanextendsLanguage{

publicStringOutput(){

return"C语言";

}

}

Pascal.java

package设计模式实验十四周_2;

publicclassPascalextendsLanguage{

publicStringOutput(){

return"Pascal";

}

 

}

Java.java

package设计模式实验十四周_2;

publicclassJavaextendsLanguage{

publicStringOutput(){

return"Java";

}

 

}

Client.java

package设计模式实验十四周_2;

publicclassClient{

publicstaticvoidmain(String[]args){

Cyuyancyuyan=newCyuyan();

Javajava=newJava();

Pascalpascal=newPascal();

Linuxlinux=newLinux();

Windowswindows=newWindows();

Unixunix=newUnix();

Consolelogconsolelog=newConsolelog();

consolelog.setLanguage(cyuyan);

consolelog.setOperationSystem(linux);

consolelog.output();

Filelogfilelog=newFilelog();

filelog.setLanguage(java);

filelog.setOperationSystem(windows);

filelog.output();

XMLlogxmllog=newXMLlog();

xmllog.setLanguage(pascal);

xmllog.setOperationSystem(unix);

xmllog.output();

}

}

UML.java

实验结果:

(3)使用组合设计模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。

AntiVirus.java

package设计模式实验十四周_3;

publicabstractclassAntiVirus{

publicabstractvoidscan();

}

ImageFile.java

package设计模式实验十四周_3;

publicclassImageFileextendsAntiVirus{

publicvoidscan(){

System.out.println("扫描图片文件");

}

}

TextFile.java

package设计模式实验十四周_3;

publicclassTextFileextendsAntiVirus{

publicvoidscan(){

System.out.println("扫描文本文件");

}

}

VideoFile.java

package设计模式实验十四周_3;

publicclassVideoFileextendsAntiVirus{

publicvoidscan(){

System.out.println("扫描视频文件");

}

 

}

Folder.java

package设计模式实验十四周_3;

importjava.util.*;

publicclassFolderextendsAntiVirus{

privateArrayListlist=newArrayList();

publicvoidadd(AntiViruselement){

list.add(element);

}

publicvoidremove(AntiViruselement){

list.remove(element);

}

publicvoidscan(){

for(Objectobject:

list){

((AntiVirus)object).scan();

}

}

}

Client.java

package设计模式实验十四周_3;

publicclassClient{

publicstaticvoidmain(Stringa[]){

AntiVirusobj1,obj2,obj3,obj4,obj5;

Folderfolder1,folder2,folder3;

obj1=newImageFile();

obj2=newTextFile();

folder1=newFolder();

folder1.add(obj1);

folder1.add(obj2);

obj3=newVideoFile();

obj4=newVideoFile();

folder2=newFolder();

folder2.add(obj3);

folder2.add(obj4);

obj5=newImageFile();

folder3=newFolder();

folder3.add(folder1);

folder3.add(folder2);

folder3.add(obj5);

folder3.scan();

}

}

UML.java

实验结果:

(4)某图书管理系统中,书籍类(Book)具有借书方法borrowBook()和还书方法returnBook()。

现需要动态给书籍对象添加冻结方法freeze()和遗失方法lose()。

使用装饰模式设计该系统。

Book.java

package设计模式实验十四周_4;

publicinterfaceBook{

publicvoidborrowBook();

publicvoidreturnBook();

}

Ibook.java

package设计模式实验十四周_4;

publicclassIbookimplementsBook{

publicvoidborrowBook(){

System.out.println("借书!

");

}

publicvoidreturnBook(){

System.out.println("还书!

");

}

}

Changer.java

package设计模式实验十四周_4;

publicclassChangerimplementsBook{

privateBookbook;

publicChanger(Bookbook){

this.book=book;

}

publicvoidborrowBook(){

book.borrowBook();

}

publicvoidreturnBook(){

book.returnBook();

}

}

LoseBook.java

package设计模式实验十四周_4;

publicclassLoseBookextendsChanger{

publicLoseBook(Bookbook){

super(book);

}

publicvoidlose(){

System.out.println("这本书已经遗失");

}

}

FreezeBook.java

package设计模式实验十四周_4;

publicclassFreezeBookextendsChanger{

publicFreezeBook(Bookbook){

super(book);

}

publicvoidfreeze(){

System.out.println("这本书已经被冻结");

}

}

Client.java

package设计模式实验十四周_4;

publicclassClient{

publicstaticvoidmain(String[]args){

Ibookibook=newIbook();

ibook.borrowBook();

ibook.returnBook();

System.out.println("-------------------------");

FreezeBookfreezebook=newFreezeBook(ibook);

freezebook.borrowBook();

freezebook.returnBook();

freezebook.freeze();

System.out.println("-------------------------");

LoseBooklosebook=newLoseBook(ibook);

losebook.borrowBook();

losebook.returnBook();

losebook.lose();

}

}

UML.java

实验结果:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1