2010-12-10 8 views
2

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

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

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

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

public void delete(Object1 obj){ 
} 

public void delete(Objectx obj){ 
} 

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

Или я должен реализовывать их отдельно друг от друга без расширения одного и того же класса?

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

+0

Я думаю, что помню, что использование перегруженных методов с одним и тем же номером параметра не является наилучшей практикой: http://www.javapractices.com/topic/TopicAction.do?Id= 119 – PeterMmm 2010-12-10 11:00:21

ответ

4

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

public void delete() 

и ваших объектов Object1, ..., ObjectX должен осуществить это. У вашего менеджера могут быть следующие методы:

public void delete(Deleteable obj) { 
    obj.delete(); 
} 
1

Я не уверен, что вы так выразились, я понял вас. . Компонент1 получил только файлы Object1, в то время как Component2 получил onyl 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) { 
    } 
} 

Обратите внимание, что этот подход будет полезен только тогда, когда каждый компонент должен быть привязан к одной concnrete «файл» (как вы назвали его). например Компонент1 имеет только файлы типа Object1 и т. Д.

Смежные вопросы