Вопрос разработки / реализации Java - PullRequest
2 голосов
/ 10 декабря 2010

Я создаю небольшой проект, который будет управлять некоторыми внутренними компонентами проекта (большой).

Теперь каждый компонент делает что-то по-своему, но в основном это одно и то же.Например: каждый компонент может удалять временные файлы, хранящиеся в нем.Но все временные файлы имеют различный тип, как в компоненте 1, временные файлы имеют тип Object1, а в другом компоненте Objectx и т. Д.

Поэтому я решил создать класс с именем Manager, который будет содержать методы, такие как delete, внутрии будет componentManager, расширяющий класс Manager и обеспечивающий реализацию методов внутри.

Должен ли я сделать Manager абстрактным? Небольшая проблема, скажем, в Manager есть эти два метода.

public void delete(Object1 obj){
}

public void delete(Objectx obj){
}

Компонент 1 будет использовать первое удаление, а какой-то другой компонент будет использовать другое удаление.

Или я должен реализовать их по отдельности все вместе, без необходимости расширять один и тот же класс?

Что было бы хорошим способом реализовать это?спасибо

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

Я думаю, вы должны создать интерфейс, который можно удалить с помощью метода

public void delete()

и ваши объекты Object1, ..., Objectx должны реализовать это. Ваш менеджер может иметь метод:

public void delete(Deleteable obj) {
    obj.delete();
}
1 голос
/ 10 декабря 2010

Я не уверен, что ты имел в виду это так, как я тебя понял. Например. Component1 получил только файлы Object1, а Component2 получил только файлы Object2?

Я не уверен с вашим решением, если вы имели в виду, как я думал, как насчет дженериков?

interface Component<T extends YourObjectsAncestor> {
    void delete(T t);
}

class Component1 implements Component<Object1> {
    public void delete(Object1 t) {
    }   
}

class Component2 implements Component<Object2> {
    public void delete(Object2 t) {
    }   
}

Обратите внимание, что этот подход будет полезен, только если каждый компонент должен быть привязан к одному конкретному "файлу" (как вы его назвали). например У Component1 есть только файлы типа Object1 и т. Д.

...