不同方法在一个对象中需要不同的属性

时间:2015-09-27 13:12:29

标签: java design-patterns constructor builder

我有一个给定的网络服务。 (这只是一个例子,真正的一个更复杂,但它有同样的问题。)服务有三个方法,所有三个方法都有一个人作为参数,需要其他东西。 (我无法改变一个或多个实体。)

实体(Person)(它只有一个默认构造函数):

private String name;
private int age;
private Address address;
private List<String> hobbies;
private List<Person> friends;
  • Method1需要名称和年龄。
  • Method2需要地址名称和年龄。
  • Method3需要所有。

我需要从我自己的对象中填充对象。我需要写一个&#34;转换器&#34;。它的最佳实践是什么?

我的解决方案:

  • 使用三种方法构建的构建器模式。
  • 设置所有属性并发送未处理的开销(我眼中的解决方案不好)。

2 个答案:

答案 0 :(得分:1)

我认为你可以通过适当使用装饰模式获得你想要的东西: https://en.wikipedia.org/wiki/Decorator_pattern

答案 1 :(得分:1)

  1. 创建仅设置必填字段的构建器听起来不错。

  2. 您可以根据自己的需要继承此类,并实现自己的构造函数

    public class Target {
        // fields
    }
    
    public class Purpose1 extends Target {
        public Purpose1(String name, int age) {
            // set fields or do whatever you wish
        }
    }
    
    public class Purpose2 extends Target {
        public Purpose2(String address, String name, int age) {
            // set fields or do whatever you wish
        }
    }
    
    public class Purpose3 extends Target {
        public Purpose3(...) {
            // set fields or do whatever you wish
        }
    }
    
  3. 然后你可以使用需要类Target的子类实例。