设计模式之外观模式

本文介绍了如何通过抽象外观模式实现FileOperation、XMLDataConvertor、DataAnalysis和ReportDisplay的整合,创建了XMLFacade和ExtendedFacade两个外观类,分别处理XML和非XML文件,提升系统扩展性和灵活性。
摘要由CSDN通过智能技术生成

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");
    }
}

运行结果:

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值