Пример реализации шаблона «Строитель»
Приведём реализацию шаблона «Строитель» на примере построения армии.
Сделаем классы создания армий двух разных стран: Рим и Карфаген.
Для простоты,
будем считать,
что у каждой страны есть одинаковые типы воинов.
Диаграмма классов выглядит следующим образом:
Рисунок 9
Диаграмма классов реализации создания армии на шаблоне «Строитель»
Исходный код (не показаны классы для типов армий):
public class RomanArmyBuilder : ArmyBuilder
{
public override void AddInfantry() {
Army.Add(new RomanInfantryman());
}
public override void AddArcher() { Army.Add(new RomanArcher()); }
public override void AddHorseman() { Army.Add(new RomanHorseman()); }
public override void AddCatapult() { Army.Add(new RomanCatapult()); }
}
public class CarthaginianArmyBuilder : ArmyBuilder
{
public override void AddInfantry() { Army.Add(new CarthaginianInfantryman()); }
public override void AddArcher() { Army.Add(new CarthaginianArcher()); }
public override void AddHorseman() { Army.Add(new CarthaginianHorseman()); }
public override void AddCatapult() { Army.Add(new CarthaginianCatapult()); }
}
public class Director
{
public List
CreateArmy(ArmyBuilder parArmyBuilder)
{
parArmyBuilder.CreateArmy();
parArmyBuilder.AddInfantry();
parArmyBuilder.AddArcher();
parArmyBuilder.AddHorseman();
parArmyBuilder.AddCatapult();
return parArmyBuilder.Army;
}
}
Если сравнить реализацию построения армии по шаблону «Строитель» с «Абстрактной
фабрикой»,
то видно отличие в том, что в шаблоне «Строитель» скрыта
реализация процесса
создания армии.
Создание армий двух стран выглядит следующим образом:
Director director = new Director();
RomanArmyBuilder romanArmyBuilder = new RomanArmyBuilder();
CarthaginianArmyBuilder carthaginianArmyBuilder = new CarthaginianArmyBuilder();
List
romanArmy = director.CreateArmy(romanArmyBuilder);
List carthaginianArmy = director.CreateArmy(carthaginianArmyBuilder);
Достарыңызбен бөлісу: