第8次实验--组合模式、代理模式实验.docx
《第8次实验--组合模式、代理模式实验.docx》由会员分享,可在线阅读,更多相关《第8次实验--组合模式、代理模式实验.docx(8页珍藏版)》请在冰点文库上搜索。
实验8—组合模式、代理模式实验
学号:
123012012137
姓名:
张超红
实验目的:
加深对组合模式、代理模式原理的理解实验环境:
C#.Net/VC++.Net或MyEclipse(Java)等
实验内容
(一):
使用组合模式设计一个杀毒软件框架,该软件既可以对一个文件夹杀毒,也可以对一个文件杀毒,文件种类包括文本文件、图片文件、视频文件。
绘制类图并编程实现。
⑴实验过程:
①、构建实现场景,画出UML类图
②、实现代码,见演示源码
publicabstractclassAntiVirus {
publicvoidkillVirus(){}
}
importjava.util.ArrayList;
public classFolderextendsAntiVirus {privateArrayListfileList=newArrayList();publicvoidfolder(AntiVirusfileName){
fileList.add(fileName);
}
publicvoidkillVirus(){
for(Objectobject:
fileList){System.out.println(object.getClass().getName());((AntiVirus)object).killVirus();
}
}
}
public classImageFileextendsAntiVirus {
publicvoidkillVirus(){
System.out.println("ImageFile杀毒中");
}
}
public classTextFileextendsAntiVirus {
publicvoidkillVirus(){
System.out.println("TextFile杀毒中");
}
}
public classVideoFileextendsAntiVirus {
publicvoidkillVirus(){
System.out.println("VideoFile杀毒中");
}
}
publicclassClient{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){AntiVirusfile1,file2,file3,file4,file5,file6;Folderfloder1,floder2,floder3;
file1=newImageFile();file2=newTextFile();file3=newVideoFile();floder1=newFolder();floder1.folder(file1);floder1.folder(file2);floder1.folder(file3);
file4=newImageFile();file5=newTextFile();file6=newVideoFile();floder2=newFolder();floder2.folder(file1);floder2.folder(file2);floder2.folder(file3);
floder3=newFolder();floder3.folder(floder1);floder3.folder(floder2);
floder3.killVirus();
}
}
实验内容
(二):
某信息咨询公司推出收费的在线商业信息查询模块,需要对查询用户进行身份验证,并记录查询日志,以便根据查询次数收取查询费用,现使用代理模式设计该系统。
⑴实验过程:
①构建实现场景,画出UML类图
②实现代码
packageagent;
/**
*
*@author张超红
*
*/
publicclassUser{
publicUser(){
//TODO自动生成的构造函数存根
}
privateStringuserName;
privateStringpassword;
//是否被允许
privatebooleanisPermission;
//查询次数
IntegerselectCount;
//查询费用
privatedoubleselectOffFees;
publicStringgetUserName(){
returnuserName;
}
publicvoidsetUserName(StringuserName){
this.userName=userName;
}
publicStringgetPassword(){
returnpassword;
}
publicvoidsetPassword(Stringpassword){
this.password=password;
}
publicbooleanisPermission(){
returnisPermission;
}
publicvoidsetPermission(booleanisPermission){
this.isPermission=isPermission;
}
publicIntegergetSelectCount(){
returnselectCount;
}
publicvoidsetSelectCount(IntegerselectCount){
this.selectCount=selectCount;
}
publicdoublegetSelectOffFees(){
returnselectOffFees;
}
publicvoidsetSelectOffFees(doubleselectOffFees){
this.selectOffFees=selectOffFees;
}
}
packageagent;
/**
*
*@author张超红
*
*/
publicclassPermissionProxyimplementsAbstractCompony{
privateUseruser;
privateRealComponypermission=newRealCompony();
publicPermissionProxy(){
//TODO自动生成的构造函数存根
}
/*(非Javadoc)
*@seeagent.AbstractCompony#selectInfor()
*/@Override
publicvoidselectInfor(){
//TODO自动生成的方法存根
if(user.isPermission()){if(user.getSelectCount()>0){
permission.selectInfor();user.selectCount--;if(user.selectCount<=0){
user.setPermission(false);
}
}
System.out.println("您查询次数已经到达上限,请缴费...");
}
else{
System.out.println("要在本系统中查询商业信息请先注册登录...");
}
}
publicUserconstruct(){
returnnewUser();
}
}
packageagent;
/**
*
*@author张超红
*
*/
publicinterfaceAbstractCompony{
//查询用户信息
publicvoidselectInfor();
}
packageagent;
publicclassRealComponyimplementsAbstractCompony{
publicRealCompony(){
//TODO自动生成的构造函数存根
}
/*(非Javadoc)
*@seeagent.AbstractCompony#selectInfor()
*/@Override
publicvoidselectInfor(){
//TODO自动生成的方法存根
System.out.println("用户正在查询商业信息...");
}
}
packageagent;
/**
*
*@author张超红
*
*/
publicclassClient{
publicClient(){
//TODO自动生成的构造函数存根
}
publicstaticvoidmain(String[]args){RealComponypermission=newRealCompony();PermissionProxyper=newPermissionProxy();Useruser=newUser();
user.setSelectCount
(2);user.setPermission(true);
permission.selectInfor();
}
}
⑵实验讨论(效果分析):