java设计模式消除代码重复

时间:2015-08-13 11:22:30

标签: java design-patterns

我正在阅读有关设计模式的内容,并想知道什么是消除格式函数下面的代码重复的好方法。

假设我有以下代码,最好采取什么方法?我可以创建一个抽象类并继承函数或将函数拉出到一个单独的静态和make引用中。

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

3 个答案:

答案 0 :(得分:2)

您可以编写一个单独的util类,它将具有此静态函数,并在test1和test2中引用它。

答案 1 :(得分:0)

您可以使用2个抽象方法String getFormat1()String getFormat2()创建一个抽象类。

然后添加包含上述代码的非静态方法formatDate(),并在创建getFormat1()个对象时调用getFormat2()SimpleDateFormat

然后,您可以创建2个扩展抽象类的类,并定义抽象方法,返回适当的值(第一个为"yyyy-mm-dd hh:mm:ss""yyyy-mm-dd",第二个为其他值。

如果您需要更多格式,只需创建另一个子类。

您还希望一直停止使用静态,因为这会阻止您使用许多设计模式以及导致其他问题。

这是Template Method Pattern

答案 2 :(得分:0)

你可以写这样的东西

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

我想补充一点:
如果您使用Java 8使用DateTime,请不要使用Date或SimpleDateFormat Oracle about DateTime
如果你不能使用Java 8,use the force