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,因为这会阻止您使用许多设计模式并导致其他问题。

这是Template Method Pattern

你可以这样写

主类

    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