Пожалуйста, помогите, никак не могу осилить паттерны, немного задачи с горем пополам сделала, а дальше ступор. Спасибо за любую помощь!
Использовать шаблон проектирования « Одиночка » ( Singleton ) для описания класса « Дед Мороз» , шаблон проектирования «Абстрактная фабрика» ( Abstract Factory ) для описания создания подарков ( abstract / concrete product ) на фабриках ( abstract / concrete factory ) и шаблон проектирования « Итератор » ( Iterator ) для организации последовательного обращения к списку детей и назначенных им фабрик
| Код | using System; using System.Collections; namespace DesignPatterns.Creational { class program { static void Main() { ConcreteAggregate a = new ConcreteAggregate(); a[0] = "Julia"; a[1] = "Marta"; a[2] = "Natalka"; a[3] = "Svitlana"; ConcreteIterator i = new ConcreteIterator(a); } // abstract factory // абстракна фабрика public interface IToyFactory { Edible GetEdible(); InEdible GetInEdible(); } // concrete factory // конкретна фабрика public class Goog_factory : IToyFactory { public Edible GetEdible() { return new cake(); } public InEdible GetInEdible() { return new toy(); } } // concrete factory // конкретна фабрика public class Bad_factory : IToyFactory { public Edible GetEdible() { return new pill(); } public InEdible GetInEdible() { return new rod(); } } public abstract class AnimalToy { protected AnimalToy(string name) { Name = name; } public string Name { get; private set; } } public abstract class InEdible : AnimalToy { protected InEdible(string name) : base(name) { } } public abstract class Edible : AnimalToy { protected Edible(string name) : base(name) { } } class cake : Edible { public cake() : base("cake") { } } class rod : InEdible { public rod() : base("rod") { } } class pill : Edible { public pill() : base("pill") { } } class toy : InEdible { public toy() : base("toy") { } } public class AbstractFactoryDemo { public static void Run() { RunGoodFactory(); RunBadFactory(); } private static void RunBadFactory() { // lets start with wooden factory // спочатку створимо дерев'яну фабрику IToyFactory toyFactory = new Bad_factory(); InEdible _rod = toyFactory.GetInEdible(); Edible _pill = toyFactory.GetEdible(); Console.WriteLine("I've got {0} and {1}", _rod.Name, _pill.Name); // Output/Вивід: [I've got Wooden Bear and Wooden Cat] } private static void RunGoodFactory() { // and now teddy one // а тепер плюшеву IToyFactory toyFactory = new Goog_factory(); InEdible _toy = toyFactory.GetInEdible(); Edible _cake = toyFactory.GetEdible(); Console.WriteLine("I've got {0} and {1}", _toy.Name, _cake.Name); // Output/Вивід: [I've got Teddy Bear and Teddy Cat] } } } abstract class Aggregate { public abstract Iterator CreateIterator(); public abstract int Count { get; protected set; } public abstract object this[int index] { get; set; } } /// <summary> /// The 'ConcreteAggregate' class /// </summary> class ConcreteAggregate : Aggregate { private readonly ArrayList _items = new ArrayList(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } // Gets item count public override int Count { get { return _items.Count; } protected set { } } // Indexer public override object this[int index] { get { return _items[index]; } set { _items.Insert(index, value); } } } /// <summary> /// The 'Iterator' abstract class /// </summary> abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } /// <summary> /// The 'ConcreteIterator' class /// </summary> class ConcreteIterator : Iterator { private readonly Aggregate _aggregate; private int _current; // Constructor public ConcreteIterator(Aggregate aggregate) { this._aggregate = aggregate; } // Gets first iteration item public override object First() { return _aggregate[0]; } // Gets next iteration item public override object Next() { object ret = null; if (_current < _aggregate.Count - 1) { ret = _aggregate[++_current]; } return ret; } // Gets current iteration item public override object CurrentItem() { return _aggregate[_current]; } // Gets whether iterations are complete public override bool IsDone() { return _current >= _aggregate.Count; } } }
|
А это задание : В этом году « Деду Морозу » помогает « Фабрика добрых подарков »и« Фабрика плохих подарков » , каждая из которых создает один съедобный и один несъедобный подарок (методы абстрактной фабрики и абстрактные продукты соответственно) . Для того , чтобы получить подарок , дети присылают сообщение в виде двух цифр : количества хороших и плохих поступков , которые они совершили за последний год. «Дед Мороз» собирает сообщения от детей и решает , отправить ребенку хороший или плохой подарок в зависимости от того, каких поступков больше ( хороших или плохих ) - назначает каждому ребенку в списке соответствующую конкретную фабрику. |