首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java设计模式消除代码重复

java设计模式消除代码重复
EN

Stack Overflow用户
提问于 2015-08-13 11:22:30
回答 3查看 133关注 0票数 1

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

假设我有下面的代码,最好采用哪种方法?我可以创建一个抽象类并继承函数,或者将函数提取到一个单独的静态中并进行引用。

代码语言:javascript
复制
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));
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-13 11:54:50

你可以写这样的东西

Mainclass

代码语言:javascript
复制
    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));
        }
    }   

接口

发电机:

代码语言:javascript
复制
    public interface Generator {

        void generate();
    }

DateFormatter:

代码语言:javascript
复制
    import java.text.ParseException;

    public interface DateFormatter {

        void formatDate(String dateString, String parserFormat, String outputFormat) throws ParseException;
    }

我想补充一件事:

不要使用日期或SimpleDateFormat,如果您使用Java 8,请使用DateTime 甲骨文关于DateTime

如果你不能使用Java 8,用力

票数 0
EN

Stack Overflow用户

发布于 2015-08-13 11:28:57

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

票数 2
EN

Stack Overflow用户

发布于 2015-08-13 11:31:31

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

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

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

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

您还希望始终停止使用静态,因为这将阻止您使用许多设计模式,同时也会引发其他问题。

这是模板法模式

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31986794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档