gpt4 book ai didi

java - 如果在桥接模式中,Abstraction 有一个 AutoClosable 实现者怎么办

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:02 24 4
gpt4 key购买 nike

<分区>

对于熟悉桥接模式的人来说,我们知道它使用组合将具体的实现者作为精炼抽象的一部分。所以基本上我们应该使用抽象作为这种模式的客户端。 enter image description here /--实现者--/ 接口(interface)实现者扩展 AutoClosable { 公共(public)无效开放(); 公共(public)无效关闭();

/**--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(Abstraction ab = new RefinedAbstraction("implementorA")),因为 Complier 会提示我的抽象不是 AutoCloseable。将 concreteImplementor 实例放在 try-with-resouces block 中没有意义,因为它是抽象接口(interface)中实际需要的方法。

我能想到的解决这个问题的唯一方法是,我可以使用 try/catch 和 finally block 来显式关闭我的 Abstraction.implementer,而不是尝试使用 try-with-resources。但这样做意味着我必须将实现者的可见性从 protected 提高到公共(public),这并不好。

有什么想法吗?或者更好的方法?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com