软件设计体系结构-实验报告7

实验名称             外观模式的应用                    日期 2018 04 1

一、实验目的:

1) 掌握外观模式(Facade)的特点

2) 分析具体问题,使用外观模式进行设计。

 

某软件公司要开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这3个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这3个操作的业务代码封装在3个不同的类中。

现使用外观模式设计该文件加密模块。

JAVA语言实现  (C#控制台应用程序实现)。绘制该模式的UML图。

 

 

二、实验环境:

 

 

 

三、实验内容:

模式UML

【模式代码(JAVA语言实现)】

public class EncryptTest {

	public static void main(String[] args) {
		
		EncryptFacade encryptFacade = new EncryptFacade();
		encryptFacade.FileEncrypt("D:\\mingwen.txt", "D:\\miwen.txt");

	}

}
public class EncryptFacade {

	private FileReader fileReader;
	private CipherMachine cipherMachine;
	private FileWriter fileWriter;
	
	public EncryptFacade(){
		fileReader = new FileReader();
		cipherMachine = new CipherMachine();
		fileWriter = new FileWriter();
	}
	
	public void FileEncrypt(String fileNameSrc,String fileNameDes){
		String plainString = fileReader.Read(fileNameSrc);
		String encryptString =  cipherMachine.Encrypt(plainString);
		fileWriter.Write(encryptString, fileNameDes);
	}

}
public class FileReader {

	public String Read(String fileName){
		System.out.println("获取文件,读取明文");
		StringBuilder stringBuilder = new StringBuilder();
		File file = new File(fileName);
		try {
			FileInputStream fileInputStream = new FileInputStream(file);
			BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
			
			int data;
			while((data = bufferedInputStream.read()) != -1){
				stringBuilder = stringBuilder.append((char)data);
			}
			bufferedInputStream.close();
			fileInputStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(stringBuilder.toString());
		return stringBuilder.toString();
	}
}
public class FileWriter {

	public void Write(String encryptText,String fileName){
		File file = new File(fileName);
		try {
			FileOutputStream fileOutputStream = new FileOutputStream(file);
			BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
			byte[] b = encryptText.getBytes();
			bufferedOutputStream.write(b);
			bufferedOutputStream.close();
			fileOutputStream.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
}
public class CipherMachine {

	public String Encrypt(String mingwen){
		System.out.println("明文转化成密文");
		String e = "";
		char[] c = mingwen.toCharArray();
		for(char c1 : c){
			e = e + (int)c1 % 7;
		}
		System.out.println(e);
		return new String(e);
	}
}

【运行截图】

四、心得体会:

 

通过本次实验,学会了使用外观模式。外观模式的适用性如下:

 

客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。

定义系统的入口。

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值