小王又来了。
小王正在设计一个导出数据的应用框架。
客户要求:导出数据可能存储成不同的文件格式,例如:文本格式、数据库备份形式、Excel格式、Xml格式等等
并且,不管什么格式,导出数据文件都分成三个部分,分别是文件头、文件体和文件尾
在文件头部分,需要描述如下信息:分公司或门市点编号、导出数据的日期,对于文本格式,中间用逗号分隔
在文件体部分,需要描述如下信息:表名称、然后分条描述数据,对于文本格式,表名称单独占一行,数据描述一行算一条数 据,字段间用逗号分隔
在文件尾部分,需要描述如下信息:输出人
请你选择恰当的设计模式帮助小王进行设计。
经过初步分析,针对不同文件格式要进行细节调整,应该使用适配器模式。初步构造模式如下:
最终代码如下:
package Mr_Wang;
public class Client {
public static void main(String[] args) {
//System.out.println("hello word");
// 首先创建出一个输出文件的机器人->robot
Robot robot=new Adapter();
robot.head();
robot.body();
robot.tail();
}
}
package Mr_Wang;
//文件输出机器人,作为一个接口
public interface Robot {
public void head() ;
public void body() ;
public void tail() ;
}
package Mr_Wang;
public class File {
protected String file_type="text";
public String get_type(){
return file_type;
}
public int set_type(String settype) {
file_type = settype;
return 0;
}
///文件头开始:
public void number() {
System.out.print("分公司或门市点编号");
}
public void date() {
System.out.print("导出数据的日期");
}
/*public void file_head() {
System.out.println("分公司或门市点编号、导出数据的日期");
//这样写在一起无法应对文本格式添加逗号的要求
}*/
///文件头结束
///文件体开始
public void table_name() {
System.out.print("表名称");
}
public void describe() {
System.out.print("分条描述数据");
}
/*
public void file_body() {
System.out.println("表名称、然后分条描述数据");
}*/
///文件体结束
///文件尾开始
public void file_tail() {
System.out.println("输出人:");
}
///文件尾结束
}
package Mr_Wang;
//适配器
public class Adapter extends File implements Robot{
public void head() {
System.out.print("机器人输出文件头");
super.number();
if(get_type().equals("text")) {
System.out.print(",");
}
super.date();
}
public void body() {
System.out.print("机器人输出文件体");
//super.file_body();
super.table_name();
if(get_type().equals("text")) {
System.out.println(" ");//另起一行
}
super.describe();
if(get_type().equals("text")) {
System.out.print(",");
}
}
public void tail() {
System.out.print("机器人输出文件尾");
super.file_tail();
}
}