如何使用设计模式将一个对象转换为具有相同属性的另一个对象?没有图书馆

时间:2018-09-27 17:39:40

标签: java android design-patterns pojo

我在Java中有两个POJO:Movie用于数据库,其他Movie用于从请求到Web服务的类似结果。

package .service
public class Movie{
 @Serialized("Title")
 private String title;
 @Serialized("Year")
 private String year;
 @Serialized("Poster")
 private String poster
}

package .database
public class Movie{
  @ColumnInfo(name = "title")
  private String title;
  @ColumnInfo(name = "year")
  private String year;
  @ColumnInfo(name = "poster")
  private String poster;
}

我已经通过创建一个进行转换的类来解决了这个问题:

 public class MovieObjectAdapter {
    public static List<service.Movie> castFrom(List<database.Movie>moviesDatabase){
        List<service.Movie> moviesModel = new ArrayList<>();
        for (database.Movie movie:
             moviesDatabase) {
            service.Movie movieModel = new service.Movie();
            movieModel.setTitle(movie.getTitle());
            movieModel.setPoster(movie.getPoster());
            movieModel.setYear(movie.getYear());
            moviesModel.add(movieModel);
        }
        return moviesModel;
    }
}

但是我对此不太满意。那么,您可以推荐哪种设计模式供我使用?

编辑:

抱歉,我忘记了一些细节,我的服务还有另一个属性名称,即数据库,这就是我拥有两个pojos的原因。抱歉,忽略了这一点。

3 个答案:

答案 0 :(得分:1)

我已经通过Mapper类做到了

public final class Mapper {

   public static service.Movie from(database.Movie dMovie) {
      service.Movie movie = new service.Movie();
      // set the properties based on database.Movie
      return movie;
   }
}

答案 1 :(得分:1)

您可以使用一种称为“反射”的技术。就像本文中一样:https://www.javainuse.com/java/chap1 该技术对于将一个对象映射到另一个对象非常有效。但这有一个缺点-这样的映射可能比较慢(相对于直接映射,就像您所做的那样)。 但是,我认为,对于您而言,这是一个理想的解决方案。

答案 2 :(得分:0)

服务包中的电影和数据库包中的电影具有相同的属性。您应该考虑为常见对象准备一个包装。例如,在服务或数据库中需要的任何地方使用应用程序主程序包中的Movie都更加轻松明了。