FileOperation类用于读取文件、XMLDataConvertor类用于将不同格式的文件转换为XML格式、DataAnalysis类用于对XML数据进行统计分析、ReportDisplay类用于显示报表。为了让系统具有更好的扩展性,在系统设计中引入了抽象外观类AbstractFacade,它拥有多个不同的子类,如XMLFacade,它用于与读取、分析和显示XML数据的类交互,ExtendedFacade类用于与读取、转换、分析和显示非XML数据的类交互。
//抽象外观模式接口
interface AbstractFacade {
void execute(String filename);
}
//子系统
public class FileOperation {
public String read(String filename){
filename=filename+"----读取成功---";
return filename;
}
}
public class XMLDataConvertor {
public String convert(String fileStr){
fileStr=fileStr+"---转换成功----";
return fileStr;
}
}
public class DataAnalysis {
public String handle(String xmlStr){
xmlStr=xmlStr+"----分析成功----";
return xmlStr;
}
}
public class ReportDisplay {
public void display(String str){
System.out.println(str + "显示成功");
}
}
//具体外观者
package facadeMode;
public class XMLFacade implements AbstractFacade {
FileOperation f; //文件读取
XMLDataConvertor x; //文件格式转换为xml
DataAnalysis d; //数据分析统计代码
ReportDisplay r; //报表显示代码
public XMLFacade(){ //xml格式的文件不需要转换
f=new FileOperation();
d=new DataAnalysis();
r=new ReportDisplay();
}
@Override
public void execute(String filename) {
String s1=f.read(filename);
String s2=d.handle(s1);
r.display(s2);
}
}
package facadeMode;
public class ExtendedFacade implements AbstractFacade {
FileOperation f; //文件读取
XMLDataConvertor x; //文件格式转换为xml
DataAnalysis d; //数据分析统计代码
ReportDisplay r; //报表显示代码
public ExtendedFacade(){
f=new FileOperation();
x=new XMLDataConvertor();
d=new DataAnalysis();
r=new ReportDisplay();
}
@Override
public void execute(String filename) {
String s1=f.read(filename);
String s2=x.convert(s1);
String s3=d.handle(s2);
r.display(s3);
}
}
//客户端测试
package facadeMode;
public class Client {
public static void main(String[] args) {
AbstractFacade a1,a2;
a1=new XMLFacade();
System.out.println("****** xml文件格式过程 **********");
a1.execute("d.xml");
System.out.println("****** 其他文件格式过程 **********");
a2=new ExtendedFacade();
a2.execute("h.csv");
}
}
运行结果: