Вопрос на собеседовании.

Может кому будет интересно )).

Есть корпорация 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);
	}
........


При обдумывании рядом ничего нет. Только листик с листингом и карандаш. Это я к тому что отвечая на этот вопрос очень интересно без использования гугла.
  • +1
  • 4 августа 2010, 03:31
  • cyril

Комментарии (3)

RSS свернуть / развернуть
+
0
а задач по sql-запросам у тебя нет?
avatar

degtyarchuk

  • 4 августа 2010, 11:32
+
0
Неа ) Ну разве что «Что такое LEFT JOIN и чем он отличается от LEFT OUTER JOIN и покажите как это выглядит схематически (ну там на примере двух множеств что получается). :))))) Этого будет достаточно чтобы понять курит в теме или курит бамбук )
avatar

cyril

  • 4 августа 2010, 16:24
+
0
ещё с группами надо примерчик
avatar

degtyarchuk

  • 4 августа 2010, 16:25

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
Не забываем смотреть статистику:

Яндекс цитирования