У меня есть 3 класса:
class First {
public void SetA(){ ... }
public void SetB(){ ... }
public void SetC(){ ... }
public void SetD(){ ... }
public void SetZ(){ ... }
}
class Second {
public void SetC(){ ... }
public void SetD(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetX(){ ... }
}
class Third{
public void SetA(){ ... }
public void SetB(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetY(){ ... }
}
Как видите, я дублирую код теми же методами.
Вчера я понял, что иногда я хотел бы добавить еще один комментарий в каждый метод.
Итак, я ищу способ решить обе эти проблемы.Одно решение, о котором я подумал:
Создать интерфейс:
interface IAllMethods {
void SetA();
void SetB();
void SetC();
void SetD();
void SetE();
void SetF();
void SetX();
void SetY();
void SetZ();
}
Создать реализацию по умолчанию:
class DefaultAllMethods {
public void SetA(){ ... }
public void SetB(){ ... }
public void SetC(){ ... }
public void SetD(){ ... }
public void SetE(){ ... }
public void SetF(){ ... }
public void SetX(){ ... }
public void SetY(){ ... }
public void SetZ(){ ... }
}
Создайте еще одну реализацию, используя шаблон декоратора, чтобы добавить дополнительную команду:
class ExtraAllMethods {
private IAllMethods _allMethods;
public ExtraAllMethods (IAllMethods allMethods) {
_allMethods=allMethods;
}
public void SetA(){
_allMethods.SetA();
extraMethod();
}
public void SetB(){
_allMethods.SetB();
extraMethod();
}
public void SetC(){
_allMethods.SetC();
extraMethod();
}
..
..
..
}
Используйте реализацию desire внутри классов First, Second и Third.Например:
class Third{
private IAllMethods _allMethods;
public Third(IAllMethods allMethods) {
_allMethods=allMethods;
}
public void SetA(){ _allMethods.SetA(); }
public void SetB(){ _allMethods.SetB(); }
..
..
..
}
Что вы думаете об этом решении?Есть ли лучший дизайн для этой потребности?
ОБНОВЛЕНИЕ
Люди спрашивают о реальном бизнесе, так вот оно: у меня есть 3 типа передачи: TransmissionA, TransmissionB, TransmissionC каждыйпередача имеет много параметров (членов или свойств).Например, TransmissionA имеет WorkerId, CustomerId, MessageName и так далее.TransmissionB имеет WorkerId и MessageName, но не CustomerId.TransmissionC имеет WorkerId, CustomerId, но без MessageName.Это только пример - в моей ситуации у меня есть еще много свойств для каждой передачи.Каждое свойство имеет метод Set.
Теперь появилась новая необходимость.Где-то в системе есть опция под названием «Обновить задачу».Если опция включена, то мне нужно обновить соответствующую задачу в каждом методе Set.Вот почему я подумал о схеме декоратора.