Abstraktní továrna (Abstract Factory)
Návrhový vzor Abstract Factory je návrhovým vzorem pro strukturu
objektů. Obsahuje o jednu úroveň abstrakce více než vzor Factory. V systému je
vytvořena hierarchie továrních tříd. Klient má k dispozici pouze
rozhraní jejich abstraktního předka a neměl by mít žádná očekávání
ohledně tovární třídy, která bude pro vytvoření instancí použita.
UML diagramy
Související vzory
- Factory –
o jednu úroveň abstrakce méně
Příklad
Rozhraní produktů
kód v jazyce Java - Zobrazit
-
/**
-
* Obecný dopravní
prostředek.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public interface Vehicle
-
{
-
// ...
-
}
Konkrétní produkty
kód v jazyce Java - Zobrazit
-
/**
-
* Osobní automobil.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
Car implements Vehicle
-
{
-
// ...
-
}
-
-
/**
-
* Nákladní vůz.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
Truck implements Vehicle
-
{
-
// ...
-
}
-
-
/**
-
* Malá loďka.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
Boat implements Vehicle
-
{
-
// ...
-
}
-
-
/**
-
* Trajekt.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
Ferry implements Vehicle
-
{
-
// ...
-
}
Rozhraní továrních tříd
kód v jazyce Java - Zobrazit
-
/**
-
* Rozhraní tovární třídy pro
vytváření vozidel.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public interface VehicleFactory
-
{
-
/**
-
* Vytvoří malé
vozidlo.
-
*
-
* @return malé
vozidlo
-
*/
-
public Vehicle
createSmallVehicle();
-
-
/**
-
* Vytvoří velké
vozidlo.
-
*
-
* @return velké
vozidlo
-
*/
-
public Vehicle
createBigVehicle();
-
}
Tovární třídy
kód v jazyce Java - Zobrazit
-
/**
-
* Tovární třída, která
vytváří instance automobilů.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
CarFactory implements VehicleFactory
-
{
-
@Override
-
public Vehicle
createBigVehicle()
-
{
-
return new Truck();
-
}
-
-
@Override
-
public Vehicle
createSmallVehicle()
-
{
-
return new Car();
-
}
-
}
-
-
/**
-
* Tovární třída, která
vytváří instance lodí.
-
*
-
* @author Vojtěch
Hordějčuk
-
*/
-
public class
ShipFactory implements VehicleFactory
-
{
-
@Override
-
public Vehicle
createBigVehicle()
-
{
-
return new Ferry();
-
}
-
-
@Override
-
public Vehicle
createSmallVehicle()
-
{
-
return new Boat();
-
}
-
}
Test
kód v jazyce Java - Zobrazit
-
public static
void main(String[] args)
-
{
-
// vytvořit tovární
třídy
-
-
VehicleFactory carFactory = new
CarFactory();
-
VehicleFactory shipFactory = new ShipFactory();
-
-
// požádat tovární třídu o
vytvoření produktů
-
-
Vehicle smallCar = carFactory.createSmallVehicle();
-
Vehicle bigCar = carFactory.createBigVehicle();
-
Vehicle smallShip = shipFactory.createSmallVehicle();
-
Vehicle bigShip = shipFactory.createBigVehicle();
-
}
Reference