某信息系统需要提供一个数据处理和报表显示模块,该模块可以读取不同类型的文件中的数据并将数据转换成XML格式,然后对数据进行统计分析,最后以报表方式来显示数据。由于该过程需要涉及多个类,试使用外观模式设计该数据处理和报表显示模块。考虑到有些文件本身已经是XML格式,无须进行格式转换,为了让系统具有更好的扩展性,在系统设计中可以引入抽象外观类,并使用Java代码编程模拟实现
20ruan2
第一步,定义抽象外观角色AbstractFacade
public abstract class AbstractFacade
{
public abstract void execute();
}
第二步,定义具体外观角色XMLFacade和ExtendedFacade
XMLFacade:
public class XMLFacade extends AbstractFacade
{
public void execute() {
System.out.println("开始处理xml格式的文件");
FileOperation fo=new FileOperation();
DataAnalysis da=new DataAnalysis();
ReportDisplay rd=new ReportDisplay();
fo.read();
da.handle();
rd.display();
}
}
ExtendedFacade:
public class ExtendedFacade extends AbstractFacade
{
public void execute()
{
System.out.println("开始处理非xml格式的文件");
FileOperation fo=new FileOperation();
XMLDataConvertor xmlda=new XMLDataConvertor();
DataAnalysis da=new DataAnalysis();
ReportDisplay rd=new ReportDisplay();
fo.read();
xmlda.convert();
da.handle();
rd.display();
}
}
第三步,定义子系统角色
DataAnalysis:
public class DataAnalysis
{
public void handle()
{
System.out.println("对数据进行统计分析");
}
}
FileOperation:
public class FileOperation
{
public void read()
{
System.out.println("读取文件中的数据");
}
}
ReportDisplay:
public class ReportDisplay
{
public void display()
{
System.out.println("打印报表来展示数据");
}
}
XMLDataConvertor:
public class XMLDataConvertor
{
public void convert()
{
System.out.println("将数据转换为XML格式");
}
}
第三步,定义用户测试类Client:
public class Client {
public static void main(String[] args) {
AbstractFacade af;
af=new XMLFacade();
af.execute();
System.out.println("---------------");
af=new ExtendedFacade();
af.execute();
}
}