java 设计模式消除代码重复
java design pattern eliminate code duplication
我正在阅读设计模式,想知道什么是消除格式函数的以下代码重复的好方法。
假设我有以下代码,最好采用什么方法?。我可以创建一个抽象 class 并继承函数,或者将该函数拉出到一个单独的静态文件中并进行引用。
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));
}
}
您可以编写一个单独的 util class,它将具有此静态函数并在 test1 和 test2 中引用它。
您可以使用 2 个抽象方法 String getFormat1()
和 String getFormat2()
创建一个抽象 class。
然后添加一个非静态方法 formatDate()
其中包含您上面的代码,并在创建 SimpleDateFormat
对象时调用 getFormat1()
和 getFormat2()
。
然后您可以创建 2 个 class 扩展抽象 class 并定义返回适当值的抽象方法(第一个和第二个的 "yyyy-mm-dd hh:mm:ss"
和 "yyyy-mm-dd"
其他人为第二)。
如果您需要更多格式,只需创建另一个子class。
您还希望停止一直使用 static,因为这会阻止您使用许多设计模式并导致其他问题。
你可以这样写
主类
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();
}
日期格式化程序:
import java.text.ParseException;
public interface DateFormatter {
void formatDate(String dateString, String parserFormat, String outputFormat) throws ParseException;
}
我想补充一点:
如果您使用 Java,请不要使用 Date 或 SimpleDateFormat 8 使用 DateTime
Oracle about DateTime
如果你不能使用 Java 8, use the force
我正在阅读设计模式,想知道什么是消除格式函数的以下代码重复的好方法。
假设我有以下代码,最好采用什么方法?。我可以创建一个抽象 class 并继承函数,或者将该函数拉出到一个单独的静态文件中并进行引用。
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));
}
}
您可以编写一个单独的 util class,它将具有此静态函数并在 test1 和 test2 中引用它。
您可以使用 2 个抽象方法 String getFormat1()
和 String getFormat2()
创建一个抽象 class。
然后添加一个非静态方法 formatDate()
其中包含您上面的代码,并在创建 SimpleDateFormat
对象时调用 getFormat1()
和 getFormat2()
。
然后您可以创建 2 个 class 扩展抽象 class 并定义返回适当值的抽象方法(第一个和第二个的 "yyyy-mm-dd hh:mm:ss"
和 "yyyy-mm-dd"
其他人为第二)。
如果您需要更多格式,只需创建另一个子class。
您还希望停止一直使用 static,因为这会阻止您使用许多设计模式并导致其他问题。
你可以这样写
主类
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();
}
日期格式化程序:
import java.text.ParseException;
public interface DateFormatter {
void formatDate(String dateString, String parserFormat, String outputFormat) throws ParseException;
}
我想补充一点:
如果您使用 Java,请不要使用 Date 或 SimpleDateFormat 8 使用 DateTime
Oracle about DateTime
如果你不能使用 Java 8, use the force