Builder-suunnittelukuvio kiteyttää kohteen ominaisuudet ja antaa sinun rakentaa siitä esityksen. Tämän mallin avulla voit rakentaa monimutkaisia objekteja, joilla on erilaiset ominaisuudet, vaikka ne kuuluvat samaan luokkaan.
Tyypillinen objektiluokka sisältää attribuutteja, konstruktoreita ja menetelmiä. Rakennusmallin avulla voit poimia rakennuslogiikan objektiluokasta ja sijoittaa sen luokkiin, joita kutsutaan rakentajiksi. Voit sitten käyttää näitä builder-luokkia luodaksesi erilaisia muunnelmia samasta objektista.
Builder-mallin käyttöönotto Javassa
Hyvä esimerkki rakentajakuviosta on pizzan tilausjärjestelmä, jonka avulla asiakkaat voivat valita erilaisia täytevaihtoehtoja.
Tuoteluokka
Yksi tapa on tehdä rakentajasta käyttöliittymä, mutta sinun on ensin luotava tuoteluokka. Tämän mallihakemuksen tuote on pizza.
julkinenluokkaaPizza{
// ominaisuuksia
yksityinenint tilausnumero;
yksityinen merkkijono pizzataikina;
yksityinen merkkijono täyte;
// Getterit ja asettajat
julkinenintgetOrderNumber(){
palata tilausnumero;
}
julkinenmitätönsetOrderNumber(int tilausnumero){
Tämä.orderNumber = tilausNumber;
}
julkinen merkkijono hanki PizzaDough(){
palata pizzataikina;
}
julkinenmitätönsetPizzaDough(String pizzaDough){
Tämä.pizzaDough = pizzaDough;
}
julkinen merkkijono getTopping(){
palata täyte;
}
julkinenmitätönsetTopping(Täytenauha){
Tämä.topping = täyttö;
}
}
Rakentajaluokka
Pitsa Java luokka on kolme ominaisuutta ja niitä vastaavat getterit ja asettajat, mutta niitä ei ole rakentajan menetelmät. Rakentajan käyttöliittymän avulla voit luoda pizzaobjektin jokaisen osan erikseen. Sen avulla voit sitten hakea koko pizzaesineen.
julkinenkäyttöliittymäRakentaja{
julkinenmitätönluo PizzaDough();
julkinenmitätönCreateTopping();
julkinen Pizza hanki Pizza();
}
Näytepizzasovelluksella asiakkaat voivat tilata mitä tahansa täytteitä, kuten juustoa, pepperonia, sipulia tai erilaisia yhdistelmiä. Siksi yksi asiakkaan tilaama pizza on juusto.
julkinenluokkaaJuustoPizzaBuildertoteuttaaRakentaja{
yksityinen Pizza pizza;
julkinenJuustoPizzaBuilder(){
Tämä.pizza = Uusi Pizza();
}
@Ohittaa
julkinenmitätönluo PizzaDough(){
Tämä.pizza.setPizzaDough("Taikina");
}
@Ohittaa
julkinenmitätönCreateTopping(){
Tämä.pizza.setTopping("Juusto");
}
@Ohittaa
julkinen Pizza hanki Pizza(){
palataTämä.pizza;
}
}
CheesePizzaBuilder-luokka toteuttaa Builder-käyttöliittymän ja käyttää sitä uuden juustopizzan luomiseen. Tämä on yksi esitys Pizza-objektista. Se tekee tämän myös Pizza-luokasta riippumattomalla tavalla.
CheesePizzaBuilder-luokka ei tiedä paljon Pizza-luokasta, se tietää vain sen, mitä sen tarvitsee tietää suorittaakseen tehtävänsä. Se tietää, että Pizza-luokassa on taikina- ja päällysteominaisuus, ja se asettaa nämä ominaisuudet kahteen tiettyyn arvoon, jotka jokaisella juustopizzalla on. Nyt joka kerta kun sovellus kutsuu CheesePizzaBuilder-luokkaa, se luo uuden pizzan, jossa on juustoa.
Ohjaajan luokka
Ohjaajaluokka on tärkeä osa rakentajamallia. Betonirakentajaluokan ainoa tarkoitus on luoda tietty kohde. Se saavuttaa tämän luomalla objektin eri osat erikseen.
Rakentajabetoniluokat eivät kuitenkaan ole tietoisia algoritmista. Yksikään rakentajaluokista ei osaa rakentaa taikinaa ennen täytteen lisäämistä. Tämä on ohjaajaluokan tehtävä.
julkinenluokkaaJohtaja{
yksityinen Rakennusmies pizzaRakentaja;
julkinenJohtaja(Builder pizzaBuilder){
Tämä.pizzaBuilder = pizzaBuilder;
}
julkinen Pizza hanki Pizza(){
palataTämä.pizzaBuilder.getPizza();
}
julkinenmitätöntee Pizza(){
Tämä.pizzaBuilder.createPizzaDough();
Tämä.pizzaBuilder.createTopping();
}
}
Director-luokka käyttää pizzojen valmistamiseen rakentajan käyttöliittymää. Se on algoritmin ylläpitäjä.
Builder-suunnittelumallin käytön edut
Suurin etu rakentajan suunnittelukuvion käyttämisessä on sen kapselointiominaisuus. Tämä on keskeinen osa ohjelmistosuunnittelua, koska se auttaa turvallisten sovellusten kehittämisessä.
Toinen tämän suunnittelumallin etu on sen kohteen rakentamistapa. Sen avulla voit luoda monivaiheisia prosesseja, joissa jokainen vaihe on riippumaton, mikä helpottaa virheenkorjausta.