软件设计模式与体系结构 实验七 外观模式
【实验内容和要求】
某软件公司要开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括3个部分,分别是读取源文件、加密、保存加密之后的文件,其中,读取文件和保存文件使用流来实现,加密操作通过求模运算实现。这3个操作相对独立,为了实现代码的独立重用,让设计更符合单一职责原则,这3个操作的业务代码封装在3个不同的类中。
现使用外观模式设计该文件加密模块。
用JAVA语言实现 (或C#控制台应用程序实现)。绘制该模式的UML图。
一、实验目的:
1) 掌握外观模式(Facade)的特点
2) 分析具体问题,使用外观模式进行设计。
二、实验环境:
Eclipse
三、实验内容:
【模式UML图】
【模式代码(JAVA语言实现)】
public class FileReader {
public String read (String fileNameSrc) {
System.out.println("读取要加密的文件");
return "未加密的文件内容";
}
}
public class CipherMachine {
public String encrypt(String plainText) {
System.out.println("加密文件");
return "加密的文件内容";
}
}
public class FileWriter {
public void write(String EncryText,String FileNameDes) {
System.out.println("写入加密后的文件");
}
}
public class EncryptFacade {
private FileReader reader;
private CipherMachine cipher;
private FileWriter writer;
public EncryptFacade() {
reader = new FileReader();
cipher = new CipherMachine();
writer = new FileWriter();
}
public void fileEncrypt(String fileNameSrc,String fileNameDes) {
String plainStr = reader.read(fileNameSrc);
String encryStr = cipher.encrypt(plainStr);
writer.write(encryStr, fileNameDes);
}
}
public class Client {
public static void main(String[] args) {
String text = "czy";
String address = "c:设计模式";
EncryptFacade ec = new EncryptFacade();
ec.fileEncrypt(text, address);
}
}
【运行截图】
四、心得体会:
通过本次实验,学会了使用外观模式。外观模式的适用性如下:
1)当要为访问一系列复杂的子系统提供一个简单入口时可以使用外观模式。
2)客户端程序与多个子系统之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。
3)在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层之间不直接产生联系,而通过外观类建立联系,降低层之间的耦合度。