gpt4 book ai didi

Java 面向对象 : Is this even possible?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:59 26 4
gpt4 key购买 nike

我试图隐藏一个不属于我的类的实现。我想通过扩展类并实现自己的接口(interface)来做到这一点。以下是我需要的类的实例是如何创建的:

QueueInfo info = admin.getQueue(queueName);

QueueInfo 是我不拥有的类。要获取此对象的实例,我必须使用管理对象来获取它。我想通过一个名为 IQueueInfo 的接口(interface)隐藏此实现。 IQueueInfo 将只允许访问消费者从 QueueInfo 需要的内容。因此,要获得此 QueueInfo,我想通过我自己的名为 EMSQueueInfo 的对象进行工作。以下是我设想的设置方式:

public class EMSQueueInfo extends QueueInfo implements IQueueInfo {
//...
}

这允许我的消费者通过接口(interface) IQueueInfo 工作,它允许底层 EMSQueueInfo 访问 QueueInfo 拥有的所有内容。我的问题在于获取 QueueInfo 的“实时”实例。要获取 QueueInfo 的常规实例,我可以说:

QueueInfo info = new QueueInfo(queueName);

这个实例不是“实时的”,因为它不是由管理对象创建的。所以,这样做:

public class EMSQueueInfo extends QueueInfo implements IQueueInfo {

public EMSQueueInfo(String queueName){
super(queueName);
}

}

没有给我一个“活的”对象。我希望能够做的是这样的事情:

public class EMSQueueInfo extends QueueInfo implements IQueueInfo {

public EMSQueueInfo(String queueName, Admin admin){
super = admin.getQueue(queueName);
}

}

但那是不可能的。

我看到的唯一解决方案是从我的 EMSQueueInfo 类中删除扩展并自己包装对象,通过私有(private)变量访问所有方法:

public class EMSQueueInfo extends QueueInfo implements IQueueInfo {

private QueueInfo _queueInfo

public EMSQueueInfo(String queueName, Admin admin){
_queueInfo = admin.getQueue(queueName);
}

public int getMessagesOnQueue() {
return _queueInfo.getMessagesOnQueue();
}

}

该解决方案确实有效,但我有点讨厌它。谁能想到更好的方法?我只是想破坏 OO 并滥用它吗?同样,我做所有这一切只是因为我希望消费者能够使用 IQueueInfo,在未来,IQueueInfo 可用于访问 QueueInfo 的 JMS 实现或 QueueInfo 的 MSMQ 实现。任何帮助都会很棒!

最佳答案

我相信您所使用的您讨厌的解决方案是一个很好的解决方案。它不会破坏 OO 或滥用它。

您正在做的是名为 Adapter pattern 的众所周知的模式(Object Adapter pattern)。您的类中唯一不需要的是扩展 QueueInfo。

关于Java 面向对象 : Is this even possible?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14896267/

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