外观模式的定义是子系统会有相互调用,这样相互调用的子系统就产生了耦合,违反迪米特法则。
如下通过例子描述
public class MyFileReader {
public String read(String fileNameSrc)
{
System.out.println("读取文件,获取明文:");
StringBuilder sb = new StringBuilder();
try {
FileReader fr = new FileReader(fileNameSrc);
BufferedReader br = new BufferedReader(fr);
String s = null;
while((s = br.readLine())!=null){//使用readLine方法,一次读一行
sb.append(System.lineSeparator()+s);
}
br.close();
} catch (FileNotFoundException e) {
System.out.println("文件不存在!");
} catch (IOException e) {
System.out.println("文件操作错误!");
}
return sb.toString();
}
}
public class CipherMachine {
public String encrypt(String plainText)
{
String es=null;
System.out.println("数据加密,将明文转换为密文:");
char[] chars = plainText.toCharArray();
for(char ch:chars)
{
String c = String.valueOf(ch % 7);
es += c;
}
return es;
}
}
public class MyFileWriter {
public void write(String encryptStr,String fileNameDes)
{
System.out.println("保存密文,写入文件。");
FileWriter writer=null;
try {
writer = new FileWriter(fileNameDes);
writer.write(encryptStr.getBytes("UTF-8").toString());
writer.flush();
writer.close();
} catch (IOException e) {
System.out.println("文件写入错误");;
}
}
}
public class EncryptFacade {
private MyFileReader reader;
private CipherMachine cipher;
private MyFileWriter writer;
public EncryptFacade() {
reader = new MyFileReader();
cipher = new CipherMachine();
writer = new MyFileWriter();
}
public void FileEncrypt(String fileNameSrc, String fileNameDes)
{
String plainStr = reader.read(fileNameSrc);
String encryptStr = cipher.encrypt(plainStr);
writer.write(encryptStr, fileNameDes);
}
}
@Test
public void facade()
{
EncryptFacade ef=new EncryptFacade();
ef.FileEncrypt("src.txt", "des.txt");
}