Closed. This question is opinion-based。它当前不接受答案。
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
Improve this question
对于熟悉桥梁模式的人们,我们知道它使用组合将具体实现者包括在精致抽象中。因此,基本上,我们应该将Abstraction用作此模式的客户端。
/ -实现者- /
接口实施者扩展了AutoClosable {
public void open();
public void close();
}
如上面的代码所示,我遇到了一个问题,我的实现者恰巧是一个AutoClosable。就我而言,我将直接在客户端使用Abstraction并将字符串作为构造函数参数来确定将使用的具体实现者。但这有点使我处于无法使用try-with-resources(抽象ab = new RefinedAbstraction(“implementorA”))的情况下,因为Complier会抱怨我的抽象不是AutoCloseable。将具体的Implementor实例放在try-with-resouces块中是没有意义的,因为这是Abstraction Interface实际上在这里想要的方法。
解决这个问题的唯一方法是,可以使用try / catch和finally块来显式关闭Abstraction.implementer,而不必尝试使用try-with-resources。但是这样做意味着我必须提高实现者从受保护者到公众的可见度,这是不好的。
有什么想法吗?或更好的方法呢?
想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
2年前关闭。
Improve this question
对于熟悉桥梁模式的人们,我们知道它使用组合将具体实现者包括在精致抽象中。因此,基本上,我们应该将Abstraction用作此模式的客户端。
/ -实现者- /
接口实施者扩展了AutoClosable {
public void open();
public void close();
}
/**--Concrete ImplementerA--**/
ImplementerA implements Implementer {
public void open(){....};
public void close(){......};
}
/**--Abstration--**/
public abstract class Abstraction {
protected Implementer implementer;
public methodAIwant2use();
public methodBIwant2use();
}
/**--Refined Abstration--**/
public class RefinedAbstraction {
public RefinedAbstraction(String Implementer) {
this.implementer=Implementer;
}
public methodAIwant2use();
public methodBIwant2use();
}
如上面的代码所示,我遇到了一个问题,我的实现者恰巧是一个AutoClosable。就我而言,我将直接在客户端使用Abstraction并将字符串作为构造函数参数来确定将使用的具体实现者。但这有点使我处于无法使用try-with-resources(抽象ab = new RefinedAbstraction(“implementorA”))的情况下,因为Complier会抱怨我的抽象不是AutoCloseable。将具体的Implementor实例放在try-with-resouces块中是没有意义的,因为这是Abstraction Interface实际上在这里想要的方法。
解决这个问题的唯一方法是,可以使用try / catch和finally块来显式关闭Abstraction.implementer,而不必尝试使用try-with-resources。但是这样做意味着我必须提高实现者从受保护者到公众的可见度,这是不好的。
有什么想法吗?或更好的方法呢?
最佳答案
您可以将Abstraction
本身设置为AutoCloseable
,并将close()
留空。组成自动关闭对象的子类将覆盖close
,以将调用委派给组成的对象。然后,您的客户端可以将所有Abstraction
视为可自动关闭,并通过使用try-with-resources与它们持续进行交互。
09-26 20:52