2012-05-05 2 views
0

То, что я понял из шаблона делегирования, это класс (ClassA), который выполняет то, что делает другой класс (ClassB). ClassA также должен делать больше вещей (иметь больше методов), чем это делает ClassB. У вас может возникнуть соблазн просто иметь класс ClassA подкласса ClassB. Сопротивляйтесь этому искушению, потому что это неправильно. Наследование по своей сути медленное. Правильный дизайн включает в себя определение члена данных типа ClassB в ClassA. Таким образом, вы устранили необходимость подклассов и уменьшило прочность сцепленияЧто касается шаблона делегирования в java

//ClassA 
public class ClassA{ 

     private ClassB classB; 

     //methods 
     public void doThis(){classB.doThis();} 
     public void doThat(){…} 
    } 

и вот класс В

ClassB 
    public class ClassB{ 
     public void doThis(){…} 
    } 

Пожалуйста посоветуйте мое понимание правильно.

+1

Это звучит примерно правильно, хотя я не вижу здесь реального вопроса. –

+0

Есть много причин для выбора делегирования по наследованию, но я бы не сказал, что производительность одна из них. –

+0

@JBNizet, спасибо, пожалуйста, скажите, каковы причины отказа от наследования для того, чтобы сделать классы более сплоченными. !! – dghtr

ответ

1

Вы действительно спрашиваете, в чем разница между inheritance and composition. Оба эти шаблона имеют свой собственный вариант использования. Effective Java предполагает, что вы должны использовать наследование, когда два объекта имеют истинное отношение «есть». Так, например, прямоугольник является формой. Поэтому он должен, вероятно, расширить форму. Однако бывают случаи, когда люди неправильно понимают эту теорию и продолжают распространяться, когда они действительно должны составлять другой объект. Преимущества, конечно, развязываются и улучшаются в будущем. Пример учебника: HashMap в java. Вместо расширений можно реализовать Map и просто скомпоновать HashMap, который выполняет фактическую логику.

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

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