2011-01-10 2 views
1

Я хочу сделать следующее: у меня есть куча классов, которые читают файлы свойств XML во время загрузки в статическом разделе. В некоторых файлах даже есть файл свойств, поэтому было бы глупо повторять загрузку одного и того же файла.Как реализовать статическую систему предпочтений на уровне проекта?

Я хочу создать одноэлементный класс, который возвращает уже загруженный экземпляр файла свойств в любой класс, который его запрашивает. Пока что так просто.

Однако у меня есть несколько из этих файлов, которые необходимо загрузить, поэтому естественной мыслью было бы написать статический базовый класс для обработки чтения файлов, а затем Object-Orient прочь деталь для каждого подкласса, они просто реализуют метод выборки местоположения.

А потом я узнал, что нет такого понятия, как статическое наследования ...

Как я могу осуществить это, не полагаясь на статическом наследовании?

+0

Возможно, вам нужно какое-либо наследство здесь? Похоже, все, что вам нужно, это класс, который загружает свойства, причем файл загружается как параметр. – nos

+0

Дело в том, что разные файлы настроек управляют разными функциями, и я не хочу, чтобы все мои настройки были в одном файле. Таким образом, каждый пакет или набор классов может управляться одним классом параметров, и единственное, что мне нужно сделать для реализации другого класса настроек, - это подкласс базы, предоставив ему конкретное местоположение. – Alex

ответ

1

Как вы указать файл, который будет загружен? Можно ли указать несколько файлов вместо одного?

Я также передумал бы использовать одноэлементный шаблон. Вероятно, вы можете использовать инъекцию зависимостей, чтобы внедрить свой интерфейс Preferences в любой класс, который ему нужен. Например, рассмотрим, как Spring предоставляет интерфейс MessageSource через свой ApplicationContext.

0

Один из вариантов заключается в реализации абстрактного базового класса с абстрактным методом, который необходимо реализовать расширителям, который указывает метод определения типа выборки местоположения.

пример: (пожалуйста, простите простые имена методов)

public abstract class BaseReader { 
    public List<Property or whatever> readFile() { 
    // common reading logic here 
    } 

    public abstract String getXmlFileLocation(); // subclasses implement this 

}