Вопрос, который необходимо решить:
«Существует несколько типов заказов на бухгалтерские услуги. Текущее решение для этих заказов - создать новый класс для каждого типа (на основе типа работы, например, аудита или повседневной работы). дневная работа, независимо от того, предназначен ли заказ для приоритетного клиента, и является ли заказ разовым или регулярным расписанием). Полная система имеет 66 * 2 * 2 таких классов (264 класса заказов!), из них 8 (2 * 2 * 2) предоставлен вам в качестве примера - CPA хотел бы, чтобы вы нашли способ уменьшить нагрузку на этот класс, не нарушая существующий интерфейс заказа. "
Код, связанный с вопросом:
if (isScheduled) {
if (1 == orderType) {
if (isCritical) {
order =
new FirstOrderTypeScheduled(
id, clientID, date, criticalLoading, maxCountedEmployees, numQuarters);
} else {
order = new Order66Scheduled(id, clientID, date, maxCountedEmployees, numQuarters);
}
} else if (2 == orderType) { // 2 is audit
if (isCritical) {
order = new CriticalAuditOrderScheduled(id, clientID, date, criticalLoading, numQuarters);
} else {
order = new NewOrderImplScheduled(id, clientID, date, numQuarters);
}
} else {
return null;
}
} else {
if (1 == orderType) {
if (isCritical) {
order = new FirstOrderType(id, clientID, date, criticalLoading, maxCountedEmployees);
} else {
order = new Order66(id, clientID, date, maxCountedEmployees);
}
} else if (2 == orderType) {
if (isCritical) {
order = new CriticalAuditOrder(id, clientID, date, criticalLoading);
} else {
order = new NewOrderImpl(id, clientID, date);
}
} else {
return null;
}
}
Итак, дано несколько типов классов (8 классов), которые указаны в вопросе выше. Я хочу спросить, среди принципов проектирования и принципов объектно-ориентированного проектирования (SOLID), есть ли метод, который мне следует применить для решения вышеуказанного вопроса? (Я подумываю использовать Bridge Pattern)
Заранее спасибо!