Пример использования:
// Инициализация клонов
Infantryman infantryman = new Infantryman();
Archer archer = new Archer();
Horseman horseman = new Horseman();
// Создание армии
List
army = new List();
army.Add(Warrior.CreateWarrior(WarriorTypes.Infantryman));
army.Add(Warrior.CreateWarrior(WarriorTypes.Archer));
army.Add(Warrior.CreateWarrior(WarriorTypes.Horseman));
В приведенной реализации классы всех создаваемых военных единиц, таких как лучники,
пехотинцы и конница, являются подклассами абстрактного базового класса Warrior. В этом классе
определен обобщенный конструктор в виде статического метода СreateWarrior. Передавая в этот
метод в качестве параметра тип боевой единицы, можно создавать воинов нужных родов войск.
Для этого обобщенный конструктор использует реестр прототипов, реализованный в виде хеша,
каждый элемент которого представляет собой пару " тип воина" - "его прототип".
Добавление прототипов в реестр происходит автоматически при создании экземпляра класса
одного из типов воинов. При этом, если в реестре существует прототип данного типа, то он будет
заменён на новый.
Для приведенной реализации шаблона «Прототип» можно отметить следующие особенности:
• Создавать новых воинов можно как при помощи обобщенного конструктора, так и
непосредственно (при этом в реестре автоматически будут обновляться объекты-клоны);
• Отсутствует недостаток реализации на базе обобщенного конструктора для шаблона
«Фабричный метод», а именно базовый класс Warrior ничего не знает о своих подклассах.
Достарыңызбен бөлісу: