gpt4 book ai didi

Java:我是否缺少限制模式?我需要仅使用选定的方法来限制实现

转载 作者:行者123 更新时间:2023-12-01 16:37:36 25 4
gpt4 key购买 nike

假设我有一些类对于一个具体情况来说方法太多了,但适合其中的大约一半,所以除了扩展它之外别无选择。同时,我想向最终用户隐藏我已经扩展了这个胖类的事实。然后我想用一些新接口(interface)限制该类,并让不需要的方法抛出 UnsupportedOperationException:

public class TooFatClass {
public void usefulMethodOne() { ... };
public void usefulMethodTwo() { ... };
public void usefulMethodThree() { ... };
...
public void notUsefulMethodOne() { ... };
public void notUsefulMethodTwo() { ... };
public void notUsefulMethodThree() { ... };
...
}

public interface OnlyUsefulMethods {
public void usefulMethodOne();
public void usefulMethodTwo();
public void usefulMethodThree();
...

public static OnlyUsefulMethods create() {
return new OnlyUsefulMethodsImpl();
}
}

// notice it is package-private
class OnlyUsefulMethodsImpl extends TooFatClass implements OnlyUsefulMethods {
public void usefulMethodOne() { ... };
public void usefulMethodTwo() { ... };
public void usefulMethodThree() { ... };
...
public void notUsefulMethodOne() { throw new UnsupportedOperationException(); };
public void notUsefulMethodTwo() { throw new UnsupportedOperationException(); };
public void notUsefulMethodThree() { throw new UnsupportedOperationException(); };
...
}

因此,如果用户确实想要,OnlyUsefulMethodsImpl 实例可以转换为TooFatClass,但它隐藏了这一事实并且不强制用户这样做所以。

但是,java不允许在接口(interface)中实现静态方法(我认为将其抽象为OnlyUsefulMethods是愚蠢的),所以我用这段臭代码结束了:

public interface OnlyUsefulMethods {
public void usefulMethodOne();
public void usefulMethodTwo();
public void usefulMethodThree();
...

public static final class Factory {
public static OnlyUsefulMethods create() { return new OnlyUsefulMethodsImpl(); }
public static OnlyUsefulMethods create(Options options) {
return new OnlyUsefulMethodsImpl(options); }
}

}

即使我将 Factory 移到接口(interface)之外,它看起来太复杂而无法仅用于一个类案例,我想要一个工厂方法而不在外部显示 OnlyUsefulMethodsImpl

我是否做错了什么/太复杂并且缺少一些限制模式?

<小时/>

可能与这个问题有关(无论如何,有一些答案可能合适,我不确定):

最佳答案

听起来是授权的好时机。

“leaner”类包装了“fat”类,并且仅公开“leaner”类的接口(interface)。有些IDE可以帮助你实现委托(delegate)。

关于Java:我是否缺少限制模式?我需要仅使用选定的方法来限制实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553216/

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