我在这里有一个两难的问题:什么是和什么不是循环引用......以及如何在肯定的情况下摆脱它。面向对象循环参考
比方说,我有一个Main
类实例化两个不同的类,其中每个班需要在其他执行方法:
MyMain {
AlarmManager alarmManager;
DatabaseManager databaseManager;
MyMain() {
alarmManager = new AlarmManager(dataBaseManager);
databaseManager = new DatabaseManager (alarmManager);
}
AlarmManager getAlarmManager() {
return alarmManager;
}
DatabaseManager getDatabasetManager() {
return databaseManager;
}
}
及其类别:
AlarmManager {
DatabaseManager dataBaseManager;
onAlarm(alarm) {
dataBaseManager.saveInHistorical(alarm);
sendAlarm(alarm);
}
sendAlarm(alarm) {
socketWriter(alarm);
}
}
DatabaseManager{
AlarmManager alarmManager;
onDatabaseConnectionError() {
saveInHistorical(databaseAlarm);
alarmManager.sendAlarm(databaseAlarm);
}
saveInHistorical(historical) {
connection.store(historical);
}
}
我猜想你可以通过查看代码来获得想法。如果有报警,我们会在AlarmManager中接收它,但它需要将其保存在历史数据库中。但是,如果我们与历史数据库存在连接错误,则还需要发送警报。
这真的是一个循环引用,其中主要有警报,但警报也主要和数据库/主相同?你会如何解决它?
它看起来像一个设计缺陷,你能详细说明这些类,以及它们应该做什么?也许我们将能够拿出不同的设计 –
如何解决婚姻OO?我喜欢这个问题!我确信有很多(学术)解决方案,但我会(实用的)为事件和警报设置一个基类。 – halfbit
@BartlomiejLewandowski'设计缺陷'或结在大脑中,你是正确的“有需要去一些退后”,我认为 – halfbit