public override AbstractProductB CreateProductB()
{
return new ProductB1();
}
}
public class ConcreteFactory2 : AbstractFactory
{
public override AbstractProductA CreateProductA()
{
return new ProductA2();
}
public override AbstractProductB CreateProductB()
{
return new ProductB2();
}
}
В
данном примере есть отдельные иерархии наследования для продуктов «A» и «B».
Абстрактный
класс фабрики реализует два
метода по созданию объектов классов «A» и «B». Конкретные
реализации фабрики переопределяют данные
методы и создают каждый свой вид продуктов.
Пример реализации абстрактной фабрики
Рассмотрим пример реализации абстрактной фабрики для создания различных типов воинов.
Сделаем классы создания армий двух разных стран: Рим и Карфаген.
Для простоты,
будем считать,
что у каждой страны есть одинаковые типы воинов.
Диаграмма классов выглядит следующим образом:
Рисунок 7
Пример фабрики классов для создания армии из воинов
Исходный код:
public abstract class Warrior
{
public abstract string Info();
}
public class Infantryman : Warrior
{
public override string Info()
{
return "Infantryman";
}
}
public class Archer : Warrior
return new RomanInfantryman();
}
public override Archer CreateArcher()
{
return new RomanArcher();
}
public override Horseman CreateHorseman()
{
return new RomanHorseman();
}
}
public class CarthaginianArmyFactory : ArmyFactory
{
public override Infantryman CreateInfantryman()
{
return new CarthaginianInfantryman();
}
public override Archer CreateArcher()
{
return new CarthaginianArcher();
}
public override Horseman CreateHorseman()
{
return new CarthaginianHorseman();
}
}
public class Army
{
private ArmyFactory _armyFactory;
private Warrior[] _army;
public Army(ArmyFactory parFactory)
{
_armyFactory = parFactory;
}
public Warrior[] CreateArmy()
{
_army = new Warrior[3];
_army[0] = _armyFactory.CreateInfantryman();
_army[1] = _armyFactory.CreateArcher();
_army[2] = _armyFactory.CreateHorseman();
return _army;
}
}
Для каждого типа войска создаётся своя иерархия классов, в
которой выделяется отдельные
классы для каждого типа войск по странам.
Создаётся базовый класс «ArmyFactory» для создания каждого из типов войск.
Для армии каждой
страны создаются фабрики – наследники.
Также добавляется класс «Army», который создаёт армию, используя переданную фабрику
классов.
Создание армий двух стран выглядит следующим образом:
RomanArmyFactory romanArmyFactory = new RomanArmyFactory();
CarthaginianArmyFactory carthaginianArmyFactory = new CarthaginianArmyFactory();
Army romanArmy = new Army(romanArmyFactory);
Warrior[] romanWarriors = romanArmy.CreateArmy();
Army carthaginianArmy = new Army(carthaginianArmyFactory);
Warrior[] carthaginianWarriors = carthaginianArmy.CreateArmy();
Достарыңызбен бөлісу: