Absztrakt gyári minta Java-ban

1. Áttekintés

Ebben a cikkben az Absztrakt gyár tervezési mintáját tárgyaljuk.

A Design Patterns: Elements of Reusable Object-Oriented Software című könyv kimondja, hogy az Absztrakt Gyár „Interfészt biztosít kapcsolódó vagy függő objektumok családjainak létrehozásához anélkül, hogy megadnák a konkrét osztályokat”. Más szóval, ez a modell lehetővé teszi, hogy olyan objektumokat hozzunk létre, amelyek általános mintát követnek.

A JDK-ban az Abstract Factory tervezési mintájára példa a newInstance () nak,-nek javax.xml.parsers.DocumentBuilderFactory osztály.

2. Absztrakt gyártervezési minta

Ebben a példában a Factory Method Design mintának két megvalósítását hozzuk létre: AnimalFactory és SzínGyár.

Ezt követően az Absztrakt gyár segítségével kezeljük a hozzájuk való hozzáférést AbstractFactory:

Először létrehozunk egy családot Állat osztályban, majd később az Absztrakt Gyárunkban fogjuk használni.

Itt van a Állat felület:

nyilvános felület Animal {String getAnimal (); Karakterlánc makeSound (); }

és konkrét megvalósítás Kacsa:

kacsa nyilvános osztály megvalósítja az állatot {@Orride public String getAnimal () {return "Duck"; } @Orride public String makeSound () {return "Squeks"; }} 

Ezenkívül konkrétabb megvalósításokat is létrehozhatunk Állat interfész (például Kutya, Medve, stb.) pontosan ilyen módon.

Az Absztrakt Gyár függő tárgyak családjaival foglalkozik. Ezt szem előtt tartva bemutatunk még egy családot Szín interfészként néhány megvalósítással (Fehér, Barna,…).

A tényleges kódot egyelőre kihagyjuk, de itt megtalálható.

Most, hogy több család készen áll, létrehozhatunk egy AbstractFactory interfész számukra:

nyilvános felület AbstractFactory {T létrehozás (String animalType); }

Ezután egy AnimalFactory a gyári módszer tervezési mintájának felhasználásával, amelyet az előző szakaszban tárgyaltunk:

AnimalFactory nyilvános osztály megvalósítja az AbstractFactory {@Orride public Animal create (String animalType) {if ("Dog" .equalsIgnoreCase (animalType)) {return new Dog (); } else if ("Kacsa" .equalsIgnoreCase (animalType)) {adja vissza az új Kacsát (); } return null; }} 

Hasonlóképpen megvalósíthatunk egy gyárat a Szín felület ugyanazzal a tervezési mintával.

Ha mindez be van állítva, létrehozunk egy FactoryProvider osztály, amely biztosítja számunkra a AnimalFactory vagy ColorFactory attól az érvtől függően, amelyet a getFactory () módszer:

public class FactoryProvider {public static AbstractFactory getFactory (String choice) {if ("Animal" .equalsIgnoreCase (choice)) {return new AnimalFactory (); } else if ("Color" .equalsIgnoreCase (választás)) {return new ColorFactory (); } return null; }}

3. Mikor kell használni az absztrakt gyári mintát:

  • Az ügyfél független attól, hogy miként hozzuk létre és komponáljuk a rendszerben lévő objektumokat
  • A rendszer több tárgycsaládból áll, és ezeket a családokat együttes használatra tervezték
  • Futásidõ-értékre van szükségünk egy adott függõség felépítéséhez

Míg a minta nagyszerű előre definiált objektumok létrehozásakor, az újak hozzáadása kihívást jelenthet. Az új típusú objektumok támogatásához meg kell változtatni a AbstractFactory osztály és az összes alosztálya.

4. Összefoglalás

Ebben a cikkben megismerhettük az Abstract Factory tervezési mintázatát.

Végül, mint mindig, ezeknek a példáknak a megvalósítása megtalálható a GitHubon.