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


Рисунок 6  Диаграмма классов для реализации абстрактной фабрики



Pdf көрінісі
бет7/15
Дата16.10.2022
өлшемі0,66 Mb.
#43481
1   2   3   4   5   6   7   8   9   10   ...   15
Рисунок 6 
Диаграмма классов для реализации абстрактной фабрики 
Исходный код: 
public class AbstractProductA 
{

public class ProductA1 : AbstractProductA 


public class ProductA2 : AbstractProductA 


public class AbstractProductB 


public class ProductB1 : AbstractProductB 


public class ProductB2 : AbstractProductB 


public abstract class AbstractFactory 

public abstract AbstractProductA CreateProductA(); 
public abstract AbstractProductB CreateProductB(); 

public class ConcreteFactory1 : AbstractFactory 

public override AbstractProductA CreateProductA() 

return new ProductA1(); 



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 



public override string Info() 

return "Archer"; 


public class Horseman : Warrior 

public override string Info() 

return "Horseman"; 


public class RomanInfantryman : Infantryman 

public override string Info() 

return "RomanInfantryman"; 


public class RomanArcher : Archer 

public override string Info() 

return "RomanArcher"; 


public class RomanHorseman : Horseman 

public override string Info() 

return "RomanHorseman"; 

}
public class cInfantryman : Infantryman 

public override string Info() 

return "CarthaginianInfantryman"; 


public class CarthaginianArcher : Archer 

public override string Info() 

return "CarthaginianArcher"; 


public class CarthaginianHorseman : Horseman 

public override string Info() 

return "CarthaginianHorseman"; 


public abstract class ArmyFactory 

public abstract Infantryman CreateInfantryman(); 


public class RomanArmyFactory : ArmyFactory 

public override Infantryman CreateInfantryman() 



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(); 


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




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

    Басты бет