В Java вы не можете наследовать от нескольких родительских классов, и, конечно, делегирование является более гибким подходом, чем наследование.
Вы можете извлечь интерфейс с общими операциями из Employee1Action
и Employee2Action
;добавить реализацию и поместить общий код в эту реализацию.Затем предоставьте объектам Employee1Action
и Employee2Action
экземпляр вашей реализации и попросите их делегировать общие операции экземпляру делегата.Таким образом, вы можете удалить дубликаты кода.
В коде
interface CommonAction {
void doSomething();
}
class DefaulCommonAction implements CommonAction {
public void doSomething() {
/* do something here -
* this is the duplicate code from Employee 1 and 2
*/
}
}
class HRAction {}
class ManagerAction {}
class Employee1Action extends HRAction {
private CommonAction action;
public Employee1Action (CommonAction action){
this.action = action;
}
// delegate operations
public void doSomething() {
action.doSomething();
}
}
class Employee2Action extends ManagerAction {
// the same delegation here
}