当我的java项目变大时,总是弹出一个问题,即是否有一种简单的方法可以对super或getParent()不能引用的特定对象进行引用。下图应说明我当前的问题:
对于每个FileListItem,我想实例化一个新的FileListItemController,它需要ProtocolController中的方法。除了通过mainWindow,FileListContentPanel,FileListItems传递之外,是否有其他方法可以引用FileListItems中main实例化的ProtocolController对象?
首先感谢您的所有回答。
我正在为我的项目使用模型, View ,控制模式。
单例模式听起来很有趣,但是我的感觉是它不能解决我的问题。这是一些代码来说明我的问题:
public class Main {
public static void main(String [ ] args) {
ProtocolController pc = new ProtocolController();
mainWindow mw = new mainWindow();
}
}
public class ProtocolController {
File protocol;
public ProtocolController(File protocol){
this.protocol = protocol;
}
public void writeSomethingToProtocolFile(String something){
// write something to th protcol file specified by the object
}
}
public class mainWindow {
public mainWindow(){
FileListContentPanel flcp = new FileListContentPanel();
}
}
public class FileListContentPanel {
public FileListContentPanel(){
int numListItems = 10;
for (int i = 0; i < 10; i++) {
FileListItem fli = new FileListItem();
FileListItemController flic = new FileListItemController(fli);
}
}
}
public class FileListItemController {
public FileListItemController(FileListItem fli){
}
public void addSomethingToProtocol(String something){
// at this point I want to use a method from the ProtocolController class instantiated by the main method
}
}
最佳答案
有不同的方法。
例如,如果您只需要一个ProtocolController
实例,则可以使用singleton pattern。然后,每个FileListItemController
都可以检索相同的ProtocolController
对象。
class ProtocolController {
private static instance;
private ProtocolController() { }
public static ProtocolController getInstance() {
if (instance == null) {
instance = new ProtocolController();
}
return instance;
}
}
然后,您可以从
ProtocolController.getInstance()
中获取FileListItemController
,然后调用所需的方法。