2012-09-05 1 views
2

Каков наилучший способ рефакторинга методов, которые имеют одинаковую логику, но используют разные классы (на Java)? СкажемКак рефакторинг Методы с одинаковой структурой, разные классы (Java)

Method1(FileInputStream obj, OutputStream o){ 
    //stuff 
    while(something){ 
    //--- 
    //some code 
    //--- 
    obj.read(); 
    //--- 
    //some code 
    //--- 
    o.write(..); 
    //code 
    } 
    //code 
} 

, а затем у меня есть

Method2(InputStreamReader obj, OutputStreamWriter os){ 
    //stuff 
    while(something){ 
    //--- 
    //some code 
    //--- 
    obj.read(..); 
    //--- 
    //some code 
    //--- 
    os.write(); 
    //code 
    } 
    //code 
} 

1 метод имеет дело с бинарными файлами и другие сделки с текстом. В идеале, я бы хотел, чтобы у вас был Read-Process-Write и скрыл всю конкретную информацию.

ответ

2

Лучший способ заключается в использовании правильных интерфейсов:

void method2(Reader obj, Writer os){ 
    // code... 
} 

затем использовать его, как это для InputStreams

method2(new InputStreamReader(fileInputStream), new OutputStreamWriter(outputstream)); 

Почему это лучше?

Это лучше, потому что вы абстрагируетесь, как работает метод. Вы говорите, что вам все равно, что такое реализация, если она соответствует Reader или Writer. Таким образом, пользователь обязан изменить InputStream на номер Reader. Не ваш. Если в этом есть исключение, то вам необходимо уловить его. НЕ ЗАКАЗАТЬ. Он забрасывается в клиентский код. Это важное замечание.

0

Вы не можете читать и писать то же самое, чтобы у них не было ничего общего, кроме имен. Единственный способ сделать их обычным - написать двоичный код и текст как двоичный, то есть все его все равно превратить в двоичный.

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

  • Нет связанных вопросов^_^