Может кому будет интересно )).
Есть корпорация ExxonMobil. Эта корпорация содержит в себе несколько компаний. Остановимся на двух — Exxon и Mobil.
Ежедневно отдел менеджмента этой компании в главном офисе корпорации занимается анализом проектов. Поступил проект и если он прошел все инстанции, то его добавляют в несколько портфелей компании: Инновационный, Инвестиционный и Стратегический.
Ниже представлен код на Java который это делает. Вопрос. Опишите пожалуйста этот код. выделите 2 — 5 ключевых, на ваш взгляд, моментов. Укажите приемущества такого подхода.
Оценка времени:
Нормальное время на подумать — 2 минуты
Вы что то задумались — 5 минут
У вас возникли трудности? — 7 минут
Досвидание, наш HR менеджер свяжется с вами — 10 минут
Сложность по 10-ти бальной шкале — 5 балов.
public abstract class ManagementFactory
{
public abstract InvestmentBriefcase createInvestmentBriefcase();
public abstract StrategicBriefcase createStrategicBriefcase();
public abstract InnovationBriefcase createInnovationBriefcase();
}
public abstract class InnovationBriefcase
{
public abstract void addProject(Project project);
}
public abstract class InvestmentBriefcase
{
public abstract void addProject(Project project);
}
public abstract class StrategicBriefcase
{
public abstract void addProject(Project project);
}
public class ExxonManagementFactory extends ManagementFactory
{
@Override
public InnovationBriefcase createInnovationBriefcase()
{
return new ExxonInnovatiationBriefcase();
}
@Override
public InvestmentBriefcase createInvestmentBriefcase()
{
return new ExxonInvestmentBriefcase();
}
@Override
public StrategicBriefcase createStrategicBriefcase()
{
return new ExxonStrategicBriefcase();
}
}
class ExxonInnovatiationBriefcase extends InnovationBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
class ExxonInvestmentBriefcase extends InvestmentBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
class ExxonStrategicBriefcase extends StrategicBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
public class MobilManagementFactory extends ManagementFactory
{
@Override
public InnovationBriefcase createInnovationBriefcase()
{
return new MobilInnovatiationBriefcase();
}
@Override
public InvestmentBriefcase createInvestmentBriefcase()
{
return new MobilInvestmentBriefcase();
}
@Override
public StrategicBriefcase createStrategicBriefcase()
{
return new MobilStrategicBriefcase();
}
}
class MobilInnovatiationBriefcase extends InnovationBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
class MobilInvestmentBriefcase extends InvestmentBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
class MobilStrategicBriefcase extends StrategicBriefcase
{
@Override
public void addProject(Project project)
{
System.out.println("Project was added: " + project.getProjectName());
}
}
public enum CompanyDivision
{
EXXON, MOBIL
}
public class CompanyManagement
{
private InnovationBriefcase innovationBriefcase;
private InvestmentBriefcase investmentBriefcase;
private StrategicBriefcase strategicBriefcase;
public CompanyManagement(ManagementFactory abstractFactory)
{
this.innovationBriefcase = abstractFactory.createInnovationBriefcase();
this.investmentBriefcase = abstractFactory.createInvestmentBriefcase();
this.strategicBriefcase = abstractFactory.createStrategicBriefcase();
}
public void handleProject(Project project)
{
innovationBriefcase.addProject(project);
investmentBriefcase.addProject(project);
strategicBriefcase.addProject(project);
}
}
public class Project
{
private String projectName;
public String getProjectName()
{
return projectName;
}
public void setProjectName(String projectName)
{
this.projectName = projectName;
}
}
...........
public void processProject(Project project, CompanyDivision division)
{
ManagementFactory af = null;
switch (division)
{
case EXXON:
af = new ExxonManagementFactory();
break;
case MOBIL:
af = new MobilManagementFactory();
break;
}
CompanyManagement management = new CompanyManagement(af);
management.handleProject(project);
}
........
При обдумывании рядом ничего нет. Только листик с листингом и карандаш. Это я к тому что отвечая на этот вопрос очень интересно без использования гугла.
Комментарии (3)
RSS свернуть / развернутьdegtyarchuk
cyril
degtyarchuk
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.