У меня есть класс предпочтений (модуль), который используется в нескольких разных приложениях.По сути, это кэш настроек, поэтому системам не нужно постоянно вызывать бэкэнд.Он похож на кеш, но с некоторыми дополнительными функциями, такими как isPreferenceSelected, имеет несколько вспомогательных методов и т. Д.
Проблема заключается в том, что я хотел бы включить savePreference в класс, чтобы тот, кто его использует, мог просто переопределитьэтот метод, будь то база данных, простой файл и т. д. Ключ в том, что этот модуль просто не хочет заботиться.Проблема в том, что это не абстрактный класс, поэтому я не могу переопределить статические методы , и даже если бы это было так, я не хочу создавать миллион экземпляров, потому что я не хочу загружать настройкикаждый раз.И я не могу создать абстрактный синглтон .
Поэтому я не уверен, что делать.Вот фрагмент кода того, что я хотел бы сделать с комментариями:
// Please ignore the missing Generics, etc.
public class Preference
{
private static HashMap preferences = new HashMap();
public static ...
// Some preferences are objects, such as images, etc.
public static setPreference(String name, Object value)
{
.. some helper code
preferences.put(name, value); // ignoring issues with if it already exists ;)
savePreference(name, value); // saves to database, flatfile, etc.
}
}
Это был базовый класс / код, который используют различные системы.Теперь я хотел бы сказать, что в веб-приложении, настольном приложении и т. Д. Я могу использовать этот класс в своем коде, например:
public someFunction(...)
{
.. do some cool code
Preference.savePreference("logoImage", image);
}
, а метод savePreference()
непросто сохраните настройки в памяти, но также сохраните их во внешнем источнике.В противном случае везде, где у меня есть savePreference()
, я должен следовать за ним с помощью вызова db savePreferenceToDB()
, вызова FlatFile, такого как savePreferenceToFlatFile()
, и так далее.Это очень подвержено ошибкам, кто-то где-то забудет сохранить его.Кроме того, на самом деле нет смысла распространять код сохранения в постоянное хранилище повсюду с этим типом кода, когда это действительно нужно сделать только один раз.Также помните, что основной модуль не знает, является ли постоянное хранилище базой данных, файлом XML, простым файлом и т. Д.
Подсказка: если бы я сделал Preference.getInstance().savePreference()
, это не сработало бы, потому что Вы не можете абстрагировать синглтон .И я не могу создать статический метод savePreference (), потому что невозможно переопределить статический метод .
Единственные варианты, которые я вижу, - это создать какой-то сложный шаблон Фабрики, но мне это кажется излишним.Поэтому любые предложения будут с благодарностью.