На одном сайте нашёл вот такой интересный проект. На примере Макдональдса показывается как нужно конструировать программу.
На таких примерах и стараюсь нацчиться программировать)))
Цитата с того сайта.
Так как у меня возникли некоторые проблемы с реализацией ArrayList, я использовал List<T>. В итоге эта часть кода получилась такой:
Дальше ничего не менял в коде.
Теперь реализуем конструктор, создающий большой HappyMeal:
С маленьким HappyMeal точно также всё делается
Пришло время реализовать класс Director, который будет отвечать за конструирование объектов:
А теперь всё реализуем)
На таких примерах и стараюсь нацчиться программировать)))
Цитата с того сайта.
А теперь, чтобы лучше понять суть паттерна Builder, рассмотрим практический пример, в котором вы будете собирать объект HappyMeal — знаменитый детский набор, предлагаемый в сети закусочных McDonald’s. В первом случае вы соберете бюджетный вариант HappyMeal (маленькая порция пепси-колы, гамбургер, картошка и игрушка), а во втором — BigHappyMeal (гамбургер вы замените на бигмак и увеличите порцию напитка).И сам код программы:
class HappyMeal { // содержит информацию о составе HappyMeal ArrayList parts = new ArrayList(); // Добавляете информацию о новой составной части public void Add(string part) { parts.Add(part); } // Выводите информацию о всем наборе public void Show() { Console.WriteLine(" Happy Meal Parts ——-"); foreach (string part in parts) Console.WriteLine (part); } }
Так как у меня возникли некоторые проблемы с реализацией ArrayList, я использовал List<T>. В итоге эта часть кода получилась такой:
class HappyMeal { ///Содержит информацию о составе HappyMeal List<string> parts = new List<string>(); // Добавляем информацию о новой составной части public void Add(string part) { parts.Add(part); } // Выводим информацию о всем наборе public void Show() { Console.WriteLine("HappyMeal parts ----"); foreach (string part in parts) Console.WriteLine(part); } }
Дальше ничего не менял в коде.
// "Конструктор - интерфейс для создания объекта HappyMeal по частям" abstract class HappyMealBuilder { public abstract void BuildBurger(); public abstract void BuildPepsi(); public abstract void BuildFries(); public abstract void BuildToy(); public abstract HappyMeal GetProduct(); }
Теперь реализуем конструктор, создающий большой HappyMeal:
// Конструктор для большого HappyMeal class BigHappyMealBuilder : HappyMealBuilder { private HappyMeal happy_meal = new HappyMeal(); public override void BuildBurger() { happy_meal.Add("BigMac"); } public override void BuildPepsi() { happy_meal.Add("Pepsi 0.7"); } public override void BuildFries() { happy_meal.Add("BigFries"); } public override void BuildToy() { happy_meal.Add("Two toys"); } public override HappyMeal GetProduct() { return happy_meal; } }
С маленьким HappyMeal точно также всё делается
// Конструктор для маленького HappyMeal class SmallHappyMealBuilder : HappyMealBuilder { private HappyMeal happy_meal = new HappyMeal(); public override void BuildBurger() { happy_meal.Add("Hamburger"); } public override void BuildPepsi() { happy_meal.Add("Pepsi 0.3"); } public override void BuildFries() { happy_meal.Add("SmallFries"); } public override void BuildToy() { happy_meal.Add("One toy"); } public override HappyMeal GetProduct() { return happy_meal; } }
Пришло время реализовать класс Director, который будет отвечать за конструирование объектов:
// "Этот класс будет заниматься конструированием" class Director { // Конструирование объекта по частям public void Construct(HappyMealBuilder builder) { builder.BuildBurger(); builder.BuildPepsi(); builder.BuildFries(); builder.BuildToy(); } }
А теперь всё реализуем)
// Создаете класс Director и строителей для двух наборов HappyMeal Director director = new Director(); HappyMealBuilder big_hmbuilder = new BigHappyMealBuilder(); HappyMealBuilder small_hmbuilder = new SmallHappyMealBuilder(); // Конструируете два продукта director.Construct(big_hmbuilder); HappyMeal hm1 = big_hmbuilder.GetProduct(); hm1.Show(); director.Construct(small_hmbuilder); HappyMeal hm2 = small_hmbuilder.GetProduct(); hm2.Show(); // Ожидаете действия пользователя Console.Read();
Комментариев нет:
Отправить комментарий