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
Java 适配器设计模式-方法调用或构造函数中的依赖关系?_Java_Design Patterns_Adapter - Fatal编程技术网

Java 适配器设计模式-方法调用或构造函数中的依赖关系?

Java 适配器设计模式-方法调用或构造函数中的依赖关系?,java,design-patterns,adapter,Java,Design Patterns,Adapter,这个例子是精心设计的,所以请容忍我 我有两个Java类,Chair和Desk,它们来自第三方(即,我无法更改它们) 对于这些类中的每一个,我都需要运行一个方法,doWork(),它依赖于DatabaseService。我的方法是创建一个适配器,为每个类实现OfficeFurniture接口 public class ChairAdapter implements OfficeFurniture { //... } public class DeskAdapter implements Of

这个例子是精心设计的,所以请容忍我

我有两个Java类,
Chair
Desk
,它们来自第三方(即,我无法更改它们)

对于这些类中的每一个,我都需要运行一个方法,
doWork()
,它依赖于
DatabaseService
。我的方法是创建一个适配器,为每个类实现
OfficeFurniture
接口

public class ChairAdapter implements OfficeFurniture {
  //...
}

public class DeskAdapter implements OfficeFurniture {
  //...
}

public interface OfficeFurniture {
  public doWork(DatabaseService databaseService);
}

最后,问题是:在
doWork()
调用中传递
DatabaseService
更好,还是在
ChairAdapter
deskapter
的构造函数中传递它,并在类字段中存储实例更好?或者还有其他更好的方法吗?

如果
数据库服务
类是一个单例,或者每个
适配器
类只需要实例化一次,然后传递给构造函数;特别是如果在每个
适配器
类中有多个方法将使用
数据库服务
实例。如果在调用之间发生变化,则将其传递到方法。

这取决于适配器的客户端是否了解数据库服务?可能不是,所以你把它放在构造函数中。如果客户必须了解有关数据库服务的一些信息,那么传递它会更好。

您找到了一个可接受的答案吗?
public class ChairAdapter implements OfficeFurniture {
  //...
}

public class DeskAdapter implements OfficeFurniture {
  //...
}

public interface OfficeFurniture {
  public doWork(DatabaseService databaseService);
}