我正在阅读关于设计模式的文章,并想知道什么是消除格式函数下面代码重复的好方法。
假设我有下面的代码,最好采用哪种方法?我可以创建一个抽象类并继承函数,或者将函数提取到一个单独的静态中并进行引用。
public interface Generator{
generate()
}
public class test1 implementes Generator{
generate()
public static string FormatDate(){
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyy-mm-dd");
System.out.println(dt1.format(date));
}
}
public class test2 implementes Generator{
generate()
public static string FormatDate(){
String date_s = " 2011-01-18 00:00:00.0";
SimpleDateFormat dt = new SimpleDateFormat("yyyy-mm-dd");
Date date = dt.parse(date_s);
SimpleDateFormat dt1 = new SimpleDateFormat("yyyymmdd");
System.out.println(dt1.format(date));
}
}发布于 2015-08-13 11:54:50
你可以写这样的东西
Mainclass
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Testclass implements Generator, DateFormatter {
public static void main(String[] args){
Testclass stack = new Testclass();
try {
stack.generate();
stack.formatDate("2011-01-18 00:00:00.0", "yyyy-mm-dd hh:mm:ss", "yyyy-mm-dd");
stack.generate();
stack.formatDate("2011-01-18 00:00:00.0", "yyyy-mm-dd", "yyyymmdd");
} catch (ParseException e) {
// TODO add some more Exceptionhandling here
System.out.println("The given String could not be parsed.");
e.printStackTrace();
}
}
@Override
public void generate() {
}
@Override
public void formatDate(String dateString, String parserFormat, String outputFormat) throws ParseException {
SimpleDateFormat dt = new SimpleDateFormat(parserFormat);
Date date = dt.parse(dateString);
SimpleDateFormat dt1 = new SimpleDateFormat(outputFormat);
System.out.println(dt1.format(date));
}
} 接口
发电机:
public interface Generator {
void generate();
}DateFormatter:
import java.text.ParseException;
public interface DateFormatter {
void formatDate(String dateString, String parserFormat, String outputFormat) throws ParseException;
}我想补充一件事:
不要使用日期或SimpleDateFormat,如果您使用Java 8,请使用DateTime 甲骨文关于DateTime
如果你不能使用Java 8,用力
发布于 2015-08-13 11:28:57
您可以编写一个单独的util类,它将具有这个静态函数,并在test1和test2中引用它。
发布于 2015-08-13 11:31:31
您可以使用两个抽象方法( String getFormat1()和String getFormat2() )创建一个抽象类。
然后添加一个包含上述代码的非静态方法formatDate(),并在创建SimpleDateFormat对象时调用SimpleDateFormat和getFormat2()。
然后,您可以创建两个类来扩展抽象类,并定义返回适当值的抽象方法(第一个是"yyyy-mm-dd hh:mm:ss"和"yyyy-mm-dd",第二个是其他)。
如果您需要更多的格式,只需创建另一个子类。
您还希望始终停止使用静态,因为这将阻止您使用许多设计模式,同时也会引发其他问题。
这是模板法模式。
https://stackoverflow.com/questions/31986794
复制相似问题