A Builder tervezési minta magában foglalja egy objektum tulajdonságait, és lehetővé teszi annak ábrázolását. Ez a minta lehetővé teszi összetett objektumok létrehozását, amelyek különböző tulajdonságokkal rendelkeznek, még akkor is, ha ugyanabba az osztályba tartoznak.
Egy tipikus objektumosztály attribútumokat, konstruktorokat és metódusokat tartalmaz. Az építő minta lehetővé teszi az építési logika kinyerését az objektumosztályból, és az építőknek nevezett osztályokba helyezését. Ezután ezeket az építő osztályokat használhatja ugyanannak az objektumnak a különböző változatainak létrehozására.
A Builder Pattern implementálása Java nyelven
Jó példa az építkezési mintára a pizzarendelési rendszer, amely lehetővé teszi az ügyfelek számára, hogy különböző feltét opciókat válasszanak.
A termékosztály
Az egyik megközelítés az, hogy az építőt interfészként hozzuk létre, de először létre kell hoznia egy termékosztályt. A termék ebben a minta alkalmazásban egy pizza.
nyilvánososztálypizza{
// tulajdonságok
magánint Rendelésszám;
magán Húr pizza tészta;
magán Húr öntet;
// getterek és szetterek
nyilvánosintgetOrderNumber(){
Visszatérés Rendelésszám;
}
nyilvánosüressetOrderNumber(int Rendelésszám){
ez.orderNumber = orderNumber;
}
nyilvános Húr kap PizzaDough-t(){
Visszatérés pizza tészta;
}
nyilvánosüressetPizzaDough(Fúrós pizzatészta){
ez.pizzaDough = pizzaDough;
}
nyilvános Húr getTopping(){
Visszatérés öntet;
}
nyilvánosüressetTopping(zsinóros feltöltés){
ez.topping = feltöltés;
}
}
Az építő osztály
A Pizza Java osztály három tulajdonsággal és a hozzájuk tartozó getterekkel és beállítókkal rendelkezik, de nincsenek konstruktor módszerek. Az építő felület lehetővé teszi a pizza objektum minden aspektusának külön-külön történő létrehozását. Ezután lehetővé teszi a teljes pizzatárgy visszakeresését.
nyilvánosfelületÉpítész{
nyilvánosüresCreatePizzaDough();
nyilvánosüresCreateTopping();
nyilvános pizza getPizza();
}
A minta pizza alkalmazás lehetővé teszi az ügyfelek számára, hogy bármilyen feltétet rendeljenek, például sajtot, pepperoni-t, hagymát vagy különböző kombinációkat. Ezért az egyik pizza, amelyet az ügyfél rendel, a sajt.
nyilvánososztályCheesePizzaBuildermegvalósítjaÉpítész{
magán Pizza pizza;
nyilvánosCheesePizzaBuilder(){
ez.pizza = új Pizza();
}
@Felülbírálás
nyilvánosüresCreatePizzaDough(){
ez.pizza.setPizzaDough("tészta");
}
@Felülbírálás
nyilvánosüresCreateTopping(){
ez.pizza.setTopping("Sajt");
}
@Felülbírálás
nyilvános pizza getPizza(){
Visszatérésez.pizza;
}
}
A CheesePizzaBuilder osztály megvalósítja a Builder felületet, és egy új sajtos pizza létrehozásához használja. Ez a Pizza objektum egyik ábrázolása. Ezt is a Pizza osztálytól független módon teszi.
A CheesePizzaBuilder osztály nem sokat tud a Pizza osztályról, csak azt tudja, amit tudnia kell, hogy betöltse funkcióját. Tudja, hogy a Pizza osztálynak van egy tészta és egy öntet tulajdonsága, és ezeket a tulajdonságokat két konkrét értékre állítja be, amelyek minden sajtos pizzánál rendelkeznek. Mostantól minden alkalommal, amikor az alkalmazás meghívja a CheesePizzaBuilder osztályt, új pizzát hoz létre, amely sajtfeltöltést tartalmaz.
A rendező osztály
A rendező osztály az építői minta döntő szempontja. A betonépítő osztály egyetlen célja egy adott objektum létrehozása. Ezt úgy éri el, hogy egy objektum különböző részeit külön hozza létre.
Az építő beton osztályok azonban nincsenek tisztában az algoritmussal. Egyik építő osztály sem tudja, hogy a feltét hozzáadása előtt meg kell építeni a tésztát. Ez a rendező osztály feladata.
nyilvánososztályRendező{
magán Builder pizzaBuilder;
nyilvánosRendező(Builder pizzaBuilder){
ez.pizzaBuilder = pizzaBuilder;
}
nyilvános pizza getPizza(){
Visszatérésez.pizzaBuilder.getPizza();
}
nyilvánosüreskészíts Pizza(){
ez.pizzaBuilder.createPizzaDough();
ez.pizzaBuilder.createTopping();
}
}
A Director osztály a builder felületet használja pizzák készítéséhez. Ez az algoritmus őrzője.
A Builder tervezési minta használatának előnyei
A builder tervezési minta használatának fő előnye a kapszulázási tulajdonsága. Ez a szoftverfejlesztés kulcsfontosságú aspektusa, mivel segíti a biztonságos alkalmazások fejlesztését.
Ennek a tervezési mintának másik előnye az objektum-konstrukciós megközelítés. Lehetővé teszi többlépcsős folyamatok létrehozását, ahol minden lépés független, ami megkönnyíti a hibakeresést.