Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用包装器作为适配器的正确设计模式是什么_Java_Design Patterns - Fatal编程技术网

在Java中使用包装器作为适配器的正确设计模式是什么

在Java中使用包装器作为适配器的正确设计模式是什么,java,design-patterns,Java,Design Patterns,假设我们有一些豆子(即POJO) 我们有BeanRapper,它是Bean上的包装器,表示Bean类的DTO。还支持从Bean到Bean的适配器 public class BeanWrapper { public Bean toBean() {} public static BeanWrapper fromBean(Bean bean) {} } 问题在于方法fromBean。 这种方法的正确设计模式应该是什么?应该是静态方法吗 换句话说,什么更好: BeanWrapper

假设我们有一些豆子(即POJO)

我们有BeanRapper,它是Bean上的包装器,表示Bean类的DTO。还支持从Bean到Bean的适配器

public class BeanWrapper {
    public Bean toBean() {}

    public static BeanWrapper fromBean(Bean bean) {}
}
问题在于方法
fromBean
。 这种方法的正确设计模式应该是什么?应该是静态方法吗

换句话说,什么更好:

BeanWrapper wrapper = BeanWrapper.fromBean(bean);
或者只使用非静态方法,如下所示:

BeanWrapper wrapper = new BeanWrapper().populateBean(bean);
根据评论编辑: 或者选择一个构造函数:

BeanWrapper wrapper = new BeanWrapper(Bean bean);

哪一种方法比另一种更好、更受欢迎?为什么会是这样呢?

这要看情况而定,所以是基于意见的。如果您使用的是CDI(内容依赖注入),那么最好使用第一个选项,首先注入包装器,避免使方法成为静态的。这在CDI环境中更可取,因为它更接近OO范例

我的意见是只有在绝对必要的时候才使用公共静态方法。e、 g.工厂方法

对于其他人来说,所有的选择都取决于你与团队的决定。但要保持一致

为什么我认为静态方法是邪恶的(在大多数情况下):

  • 像多态性这样的OO原则被静态方法抛弃了
  • 静态方法表示不知道其所属位置的方法。OO提倡“谁负责”,每个方法都应该属于某个东西
  • 可测试性是一个问题。调用静态方法的每段代码都需要完整地测试该静态方法,因为编译器会将该静态方法原样“复制”到调用方法中。这导致无法维护的测试
  • 它们可以被看作是一种全局方法/过程。因此,它所编写的类实际上只是为了它的名称,而不是它的状态或责任
  • 代码变得更加复杂,因为很难说出它的用途、为什么要使用它以及在什么上下文中使用它。误用很容易
由于Java是一种OO语言,因此在这种环境下使用它是一种很好的实践。考虑到这一点,IMHO在以下情况下最好使用公共静态方法:

  • 工厂方法
  • 单元测试

这个问题主要基于观点。您没有考虑的另一种选择是使用构造bean的构造函数。那么就不需要一个单独的
populateBean
方法,在静态方法还是构造函数之间进行选择在很大程度上取决于品味。我同意,这个问题主要是基于观点的。例如,您还可以使用一个指定模式的框架。这里有一个例子:
BeanWrapper wrapper = new BeanWrapper(Bean bean);