我有一个带有静态方法的类Settings
,我用它来保存和加载我的数据。这是例如Save()
方法:
public static void Save(SETTING_KEY key, String value)
{
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
}
现在我想让类Settings
可观察。问题是从Observable扩展我的Settings-class不起作用,因为我没有实例化这个类,因为我只使用它的静态方法。
有没有简单的方法可以使这个静态类可观察?
答案 0 :(得分:2)
添加自己的观察者机制。
下的简单实现public interface Observer {
void onSettingsChanged(String key, String value);
}
private static Observer observer;
public static void setObserver(Observer observer_) {
observer = observer_;
}
public static void Save(SETTING_KEY key, String value) {
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
if (observer != null) {
observer.onSettingsChanged(key, value);
}
}
如果需要超过1,也可以使用List<Observer>
,并且还可以使用某种事件总线(e.g. Otto)系统来发布事件,而无需提供直接的观察器机制。 / p>
答案 1 :(得分:1)
您可以尝试使用Singleton模式吗? (Java Singleton Pattern)
这样,你可以扩展observable。
答案 2 :(得分:0)
您可以将单例与静态方法结合使用。
class Settings extends Observable {
private static Settings instance;
private static synchronized Settings getInstance() {
if(instance == null) {
instance = new Settings();
}
return instance;
}
public static void Save(SETTING_KEY key, String value)
{
SharedPreferences sp = _context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString(key.toString(), value);
editor.commit();
getInstance().notifyObservers(value); // or whatever
}
// can't override addObserver with a static method, so make a new method instead
public static void addObserverStatic(Observer observer) {
getInstance().addObserver(observer);
}
}
正如其他人所说,单身人士的静态方法有点顽皮。如果可以,请以其他方式做。