Порождающие шаблоны проектирования


Рисунок 8  Диаграмма классов для шаблона «Строитель»



Pdf көрінісі
бет9/15
Дата16.10.2022
өлшемі0,66 Mb.
#43481
1   ...   5   6   7   8   9   10   11   12   ...   15
Байланысты:
Creational Patterns

Рисунок 8 
Диаграмма классов для шаблона «Строитель» 
Класс Director содержит указатель или ссылку на экземпляр одного из дочерних классов Builder, 
определяющего соответствующе представление. После этого, класс Director может обрабатывать 
клиентские запросы на создание объекта. Получив такой запрос, с помощью имеющегося 
экземпляра строителя, Director строит продукт по частям, а затем возвращает его пользователю. 
Исходный код 
public abstract class Builder 

protected abstract Product BuildPart(); 
public Product GetProduct() 

return BuildPart(); 


public class ConcreteBuilder : Builder 

protected override Product BuildPart() 

Product product = new Product(); 
BuildPart1(); 
BuildPart2(); 
return product; 

private void BuildPart1() 


private void BuildPart2() 



public class Director 

Builder _builder; 
public Product Construct() 

return _builder.GetProduct(); 


public class Product 




Пример реализации шаблона «Строитель» 
Приведём реализацию шаблона «Строитель» на примере построения армии. 
Сделаем классы создания армий двух разных стран: Рим и Карфаген. Для простоты, будем считать, 
что у каждой страны есть одинаковые типы воинов. 
Диаграмма классов выглядит следующим образом: 
Рисунок 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); 


Достарыңызбен бөлісу:
1   ...   5   6   7   8   9   10   11   12   ...   15




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет