You are on page 1of 16

U svetu razvoja softvera, svaki projekat zahteva specifičan tok koda da bi postigao svoj cilj.

Nakon rasta informacione


tehnologije, uočeno je da mnogi procesi u različitim domenima i poslovanju ostaju isti. Na primjer, način na koji se
korisnik prijavljuje i odjavljuje. Ovi uobičajeni scenariji se sada postižu korištenjem obrasca dizajna.

obrazac dizajna je opće, višekratno upotrebljivo rješenje za generički i uobičajeni problem. U stvarnosti to nije gotovo
rješenje za implementaciju, već je to obrazac za rješavanje određenog problema koji se može koristiti u mnogim
različitim scenarijima.

prednost
Dizajnerski uzorci imaju mnogo prednosti. Evo nekoliko njih:

 Gotovo svi obrasci dizajna su objektno orijentirani i stoga se mogu ponovo koristiti u više projekata
 Uz unaprijed definirani tok, oni pružaju veću tačnost i transparentnost arhitekturi i dizajnu projekta
 Dizajnerski obrasci su se pokazali kao jedino rješenje za neke zahtjeve projekta

ograničenja
Uz toliko prednosti, postoje i neka ograničenja i kritike dizajnerskih obrazaca. Evo nekoliko njih:

 Mnogi obrasci dizajna su ili zastarjeli ili su dio novorazvijenih okvira


 Čini se da neprikladna upotreba SAP ABAP obrazaca dizajna povećava složenost programa
 Dizajnerski obrasci se ponekad smatraju sintaksom. Pa, nije i može se mijenjati prema zahtjevima
projekta
 Dizajnerski obrazac dolazi sa složenošću i niskom mogućnošću ponovne upotrebe, što košta više
vremena u izvršavanju programa. Preporučljivo je koristiti obrazac dizajna samo ako zaista služi
potrebama





Predložak na Javi

Obrasci dizajna pomažu koderu da upiše čist, učinkovit i neponovljiv kod s manje povezivanja ili ovisnosti
između pojedinih radnih jedinica. Kad god koder analizira zahtjev koji je prikazao klijent, tada se prvo vodi
računa o prikladnom dizajnerskom obrascu za implementaciju koda, na kojem će se kôd kasnije skalirati,
mogu se uključiti i neka dodatna ograničenja.

Uzorci dizajna uvijek se biraju s kontekstom skalabilnosti i čiste primjene.

Odlučujemo se za predloške kad ih tražimo da ispunimo pomoću određenih implementacija, koje se zovu
predloške.

A u areni kodiranja koristimo ove paradigme u sljedećim vrstama poslovnih scenarija.

Scenarij 1 -

Vi bi trebali dizajnirati web-bazirano rješenje za Predložak na Javi gdje se od vas traži da implementirate
karakteristična svojstva vozila poput njegove formule za izračunavanje brzine, izračuna zakretnog momenta
itd. Dakle, za bicikl bi bilo drugačije od onoga što bi bilo za automobil, a ako vidimo perspektivu
skalabilnosti, tada dodamo osnovni predložak koji upravo ima vanjski kostur ovih metoda povezanih s
proračunom, a zatim smo u naš kod dodali samo varijante tih implementacija, čime ćemo napraviti
fleksibilan dizajn. Vidjevši samo ovaj predložak, korisnik bi stekao predodžbu o funkcionalnostima koje
nude i može se radovati samo u srodnim klasama.

2. scenarij -

Drugi slučaj može biti generiranje zajedničkog predloška za klase baza podataka koje ćete pozivati u svom
projektu, možda koristite Oracle, MySQL ili DB2, a vjerojatno se u različitim scenarijima kodiranja veselite
povezivanju s njima u različitim instancama vremena, tako da u predložak možete unijeti korisničko ime,
lozinku, dobiti vezu i sl. svojstva, a klase koje se proširivaju davale bi detalje implementacije dok tražite.

Java programer zna kako implementirati ovu funkciju !! Da, apstraktna klasa je pravi odgovor, nadam se da
znate da kad god imamo scenarije gdje se usko povezani entiteti trebaju staviti u rješenje, tada biramo
apstraktne klase (u suprotnom sučelja također rješavaju našu svrhu).

Implementacija predloška u Javi

1. Osnovnu klasu učinite apstraktnom koja uključuje i metode obrasca, kao i apstraktne metode.

2. Metode predloška su konačne prirode i neće se naknadno mijenjati.

3. Apstraktne metode su neophodne za primjenu podržavanjem koda poslovne logike u razredima provedbe.

4. Metoda bi mogla biti apstraktna u dječjim razredima ako se ne mora primijeniti samo na njoj.

5. Briga o izuzećem postupanju na odgovarajući način je također važan scenarij.

6. Ispravan izbor onoga što mora biti označeno apstraktno, a što ne.
Metode s tijelima u osnovnom razredu izrađuju se kao konačne vrste, jer ih se ne može preglasiti, kao i za
izračun broja okretaja u vozilu može biti isti.

Ispod ovdje definirali smo primjer temeljen na predložaku java, a on uključuje primjerak istog uzorka -

public abstract Vehicle


(
String fuelType;
Int countOfSeats;
public abstract double calcSpeed() throws Exception;
public abstract double calcTorque() throws Exception;
public final void templateMethod()
(
Task1();
Task2();
Task3();
)
public Bike extends Vehicle
(
@Override
public abstract double calcSpeed() throws Exception

(
try
(
return distance/time;
)
Catch(Exception e)
(
System.out.println(e.printStackTrace());
)
)
@Override
public abstract double calcTorque() throws Exception
(
try
(
return radialLength * force;
)
Catch(Exception e)
(
System.out.println(e.printStackTrace());

)
)
)
public car extends Vehicle
(
Int doorCount; // door doesn't exist in all vehicles so has been added here
@Override
public abstract double calcSpeed() throws Exception
(
try
(
return distance/time;
)
Catch(Exception e)
(
System.out.println(e.printStackTrace());
)
)
@Override
public abstract double calcTorque() throws Exception
(
try
(
return radialLength * force;
)
Catch(Exception e)
(
System.out.println(e.printStackTrace());
)
)
)

Možete koristiti eclipse ili druge mrežne platforme za sastavljanje da biste provjerili ovu implementaciju
vlastitim implementacijama.

Zahtjevi sustava prije nego što kôd

1. Po mogućnosti je instaliran Java 8.

2. Promjene sustava ispravno se konfiguriraju za JRE.

3. Također je potreban IDE poput pomrčine koji automatski provjerava sintaktičke pogreške.

4. Otklanjanje pogrešaka samo s IDE-om.

5. Dodaci za analizu dizajna predloška.

6. Alati za pridruživanje dijagrama klasa znati odnos nasljeđivanja više razine između klasa koje ste
napravili u implementaciji uzorka predloška.

7. Bilo koji Windows, Linux ili MAC učinio bi vaš zadatak.

Prednosti predloška u Javi

1. Sprječava dupliciranje koda, budući da se opće stvari mogu implementirati samo u apstraktnoj klasi,
potrebne varijacije mogu se provesti u potklasama.
2. Promjenljivi obrasci mogu se implementirati u potklase na temelju nasljednog odnosa
implementacije. Taj se postupak naziva prevladavanjem metoda.
3. Glavni predložak može imati apstraktne i ne-apstraktne metode, što pojednostavljuje i fleksibilno
sprovodi.
4. Duljina koda ostaje ograničena.
5. Kôd izgleda čist i učinkovit.
6. Lako za uklanjanje pogrešaka, čime je život programera lakši.

Koristite slučajeve

1. Implementacije veza-has.
2. Implementacije baze podataka
3. Implementacija inačica vozila.
4. Prikupljanje voća i primjena vitaminskih učinaka.
5. Implementacija metode radnih tijekova.

Uzorci dizajna u Javi


Uzorke dizajna prvi je izumio Christopher Alexander 1977. Ali kasnije su četvorica programera, naime
Erich Gamma, Richard Helm, John Vlissides i Ralph Johnson, napisali knjigu pod naslovom ' Banda
uzoraka s četiri dizajna, elementi višestruko objektno orijentiranog softvera ”1995. godine.

Od tada su svi uzorci dizajna postali poznati kao „ Banda od četiri uzorka dizajna '.

Uzorci dizajna neovisni su o bilo kojem programskom jeziku, jer se koriste za rješavanje uobičajenih
objektno orijentiranih problema s dizajnom, a nisu ograničeni samo na određeni programski jezik. Dakle, u
osnovi je to ideja, a ne provedba.

Tako pomoću dizajnerskih obrazaca možemo razviti programe koji su učinkovitiji, fleksibilniji, održiviji i
mogu se ponovno koristiti.

Prednosti dizajnerskih uzoraka

U nastavku su navedene neke od prednosti upotrebe obrazaca dizajna u našim aplikacijama:

 Uzorci dizajna mogu se ponovno koristiti i mogu ih koristiti više projekata.


 Arhitekturu sustava možemo definirati pomoću dizajnerskih obrazaca.
 Uzorci dizajna pružaju transparentnost dizajnu aplikacije.
 Uzorci dizajna već su dobro ispitani i dokazani kako bismo ih mogli koristiti bez ikakvih briga.
 Uzorci dizajna omogućuju nam izgradnju boljih sustava, a također pružaju jasnoću u arhitekturi
sustava.

Kada koristiti obrasce dizajna

Pa kada bismo točno trebali koristiti uzorke dizajna?

Uobičajeno koristimo obrazac dizajna tijekom početne faze analize i zahtjeva SDLC (životni ciklus razvoja
softvera). Kada se koristi tijekom faze analize i zahtjeva SDLC-a, pruža više informacija o ovoj fazi. Java
interno podržava obrasce dizajna.

Uzorci dizajna u Javi kategorizirani su na sljedeći način:


Što se tiče ovog vodiča, zanimaju nas samo kreativni uzorci dizajna.

Uzorci kreativnog dizajna dalje su klasificirani kako slijedi:

Jednokrani uzorak u Javi


Jednostruki uzorak vrsta je kreativnog uzorka u Javi. Singleton uzorak je obrazac dizajna u kojem je u Java
virtualnom stroju prisutan samo jedan primjerak klase. Jednostruka klasa (koja implementira jednokračni
uzorak) mora pružiti globalnu pristupnu točku da bi dobila instancu klase.

Drugim riječima, jednokračni uzorak ograničava instanciranje klase. Singleton obrazac koristi se u provedbi
zapisnika za aplikacije. Također se koristi u implementaciji spremišta niti ili u predmemoriji.
Java satovi, java.awt.Desktop i java.lang.runtime također upotrijebite jednokračni uzorak.

Prednosti

 Kako se koristi samo jedan primjerak singleton klase, štedimo memoriju.


 Također, osigurava ponovnu upotrebu jer se isti pojedinačni objekt koristi iznova i iznova.

Sada prijeđimo na implementaciju jednobojnog uzorka.

Implementacija Singleton uzorka

Kao što je već spomenuto, jednokračni uzorak dizajna ograničava klasu samo s jednom instancom i ovoj
instanci se daje globalna točka pristupa. Sve su se to klase iznova odnosile na isti objekt.

Sljedeći UML dijagram objašnjava Singleton obrazac.

Kao što pokazuje gornji UML dijagram, singleton klasa ima definiranu jednu instancu i pristupamo joj metodom
getInstance (). Dakle, tvornica pojedinca koja je odgovorna za stvaranje objekata koristi metodu getInstance za
vraćanje istog objekta (koji je tamo u klasi) iznova i iznova.

Pa kako implementirati Singleton obrazac u program?

Izrađujemo singleton klasu i imamo njen konstruktor kao 'private' tako da klasa ne može biti instancirana.
Zatim kreiramo privatnu instancu ove singleton klase unutar same klase. Tada imamo posebnu javnu metodu
getInstance () koja vraća singleton objekt u vanjski svijet.

Ova implementacija ove singleton klase kako je gore objašnjeno prikazana je u donjem Java
programu.

class SingletonObject { //create an object of SingletonObject private static


SingletonObject instance = new SingletonObject(); //private constructor so that we
cannot instantiate the class private SingletonObject(){} //returns the only available
object public static SingletonObject getInstance(){ return instance; } public void
printMessage(){ System.out.println('Hello from Singleton object!!!'); } } public class
Main { public static void main(String[] args) { //illegal statement because constructor
is private //Compile Time Error: The constructor SingletonObject() is not visible
//SingletonObject object = new SingletonObject(); //call getInstance to retrieve the
object available from the class SingletonObject object = SingletonObject.getInstance();
//show the message object.printMessage(); } }
Izlaz:

Sada ako provjerimo glavnu metodu, imajte na umu da ako pokušavamo stvoriti objekt klase singleton
pomoću novog operatora, kompajler će dati pogrešku u kompilaciji (vidi komentirani kôd u glavnoj metodi).
Objekt klase singleton dobivamo metodom getInstance (), a zatim ga možemo koristiti kao i obično za
pristup metodama.

Tvornički uzorak u Javi


Tvornički uzorak u Java se naziva i 'Uzorak tvorničke metode' ili 'Virtualni konstruktor'. U ovom uzorku
kreiramo sučelje ili apstraktnu klasu s deklaracijama metoda, a zatim su konkretne klase ili potklase koje
implementiraju ovo sučelje ili nasljeđuju klasu odgovorne za stvaranje instanci klase.

Prednosti

 Tvornički uzorak vrsta je kreativnog uzorka i najčešće se koristi uzorak u Javi.


 Korištenjem tvorničkog uzorka osiguravamo da stvarna logika stvaranja ne bude izložena vanjskom
svijetu.

Dakle, ako klasa koja implementira tvornički obrazac ima metodu za izračunavanje kamatne stope, tada će
konkretne klase implementirati ovu klasu, a također će primijeniti metodu za izračunavanje kamatne stope.

Tada će postojati još jedna klasa koja je tvornička klasa koja će pristupiti tim konkretnim primjerima klase
tako da nismo svjesni kako se implementira logika za izračunavanje kamatne stope. Pozivamo samo metodu
i dobivamo izlaz.

Pa kada točno možemo koristiti obrazac Tvorničke metode?

Kada roditeljske klase odluče delegirati stvaranje instanci u svoje podrazrede, tada možemo ići na tvornički
obrazac (Ovo je gore objašnjeno). Također možemo koristiti tvorničku metodu kada klasa ne zna koje
podrazrede treba stvoriti.

Sada da vidimo provedbu uzorka tvorničke metode.

Provedba tvorničkog uzorka

Kao primjer, provedimo generičko sučelje oblika. Iz ovog sučelja možemo izvesti razne konkretne klase
poput kruga, pravokutnika itd. Tada ćemo imati klasu shapeFactory koja će pristupiti objektima konkretne
klase. UML za ovaj obrazac prikazan je u nastavku.
Kao što je već objašnjeno, ovo je UML dijagram za tvornički uzorak. Sada ćemo implementirati Java
program koji demonstrira tvornički obrazac.

//Geometric_shape interface interface Geometric_shape { void draw_shape(); }


//Geometric shape classes implementing Geometric_shape interface class Rectangle
implements Geometric_shape { @Override public void draw_shape()
{ System.out.println('Rectangle class::draw_shape() method.'); } } class Square
implements Geometric_shape { @Override public void draw_shape()
{ System.out.println('Square class::draw_shape() method.'); } } class Circle implements
Geometric_shape { @Override public void draw_shape() { System.out.println('Circle
class::draw_shape() method.'); } } //Factory class for Geometric_shape class
ShapeFactory { //shapeObject method gets particular shapeType (circle, Square or
Rectangle) public Geometric_shape shapeObject(String shapeType){ if(shapeType == null){
return null; } //retrieve Circle object if(shapeType.equalsIgnoreCase('Circle'))
{ return new Circle(); //retrieve Rectangle object } else
if(shapeType.equalsIgnoreCase('Rectangle')){ return new Rectangle(); ////retrieve
Square object } else if(shapeType.equalsIgnoreCase('Square')){ return new Square(); }
return null; } } public class Main { public static void main(String[] args) { //Create
a ShapeFactory object to get different geometric shapes ShapeFactory shapeFactory = new
ShapeFactory(); //circle Geometric_shape shape_Circle =
shapeFactory.shapeObject('CIRCLE'); //draw method of Circle
shape_Circle.draw_shape(); //Rectangle Geometric_shape shape_Rectangle =
shapeFactory.shapeObject('RECTANGLE'); //draw method of Rectangle
shape_Rectangle.draw_shape(); //Square Geometric_shape shape_Square =
shapeFactory.shapeObject('SQUARE'); //draw method of square
shape_Square.draw_shape(); } }
Izlaz:

Uzorak graditelja u Javi


U obrascu Graditelja koristimo korak po korak za izgradnju složenog objekta pomoću malih i jednostavnih
objekata.

Dakle, kad god naiđemo na objekt koji se ne može stvoriti u jednom koraku, idemo na obrazac graditelja.

Prednosti

 Koristeći obrazac Graditelj, možemo razdvojiti konstrukciju i prikaz objekta.


 Također možemo promijeniti unutarnji prikaz predmeta.
 Pomoću graditeljskog uzorka možemo graditi složene dizajne poput cijelog sustava isporuke.

Praktični primjer uzoraka Builder je sustav naručivanja hrane koji je obuhvaćao složene korake prikupljanja
naručenih namirnica, zatim pakiranja, naplate, narudžbe u zgradama i slanja.

U ovom uputstvu implementirat ćemo primjer sustava za naručivanje tableta koji koristi obrazac Builder.

Implementacija uzoraka graditelja

Općeniti UML dijagram za obrazac Builder dan je u nastavku.

Gornji dijagram prikazuje UML dijagram uzorka Builder. Kao što je prikazano na gornjem dijagramu,
imamo četiri komponente u obrascu Builder.
 Proizvod: Ovo predstavlja složeni objekt koji treba izgraditi.
 Graditelj sažetak klase: Apstraktna klasa koja sadrži prototipove svih funkcionalnosti potrebnih za
izgradnju složenog objekta.
 Klasa ConcreteBuilder: Ovo je konkretna klasa koja nasljeđuje klasu Builder i stvara određeni
složeni objekt. Možemo imati onoliko klasa ConcreteBuilder koliko nam treba.
 Klasa redatelja: Ova klasa kontrolira algoritme koji generiraju konačni proizvod.

Sljedeći primjer programiranja prikazuje demonstraciju uzoraka Builder pomoću sustava za


naručivanje tableta za tablete.

import java.util.ArrayList; import java.util.List; //Packing interface for tablets


interface Packing { public String pack(); public int price(); } //Tablet class -
abstract abstract class Tablet implements Packing{ public abstract String pack(); }
//company - extends Tablet abstract class Company extends Tablet{ public abstract int
price(); } //Lenovo tablet class Lenovo extends Company{ @Override public int price()
{ return 541; } @Override public String pack(){ return 'Lenovo Yoga'; } } //Micromax
tablet class MicroMax extends Company { @Override public int price(){ return 338; }
@Override public String pack(){ return 'MicroMax'; } } //Tablet type class TabType
{ private List items=new ArrayList(); //add items public void addItem(Packing packs)
{ items.add(packs); } //retrieve cost public void getCost(){ for (Packing packs :
items) { packs.price(); } } //show all items public void showItems(){ for (Packing
packing : items){ System.out.print('Tablet name : '+packing.pack());
System.out.println(', Price(in U.S.Dollars) : '+packing.price()); } } } //builder class
for tablets order class TabBuilder { public TabType buildLenovoTab(){ TabType lenovo
=new TabType(); lenovo.addItem(new Lenovo()); return lenovo; } public TabType
buildMicroMaxTab(){ TabType mmx=new TabType(); mmx.addItem(new MicroMax()); return mmx;
} } public class Main{ public static void main(String args[]){ //build the tablets
order and display the order TabBuilder tabBuilder=new TabBuilder(); TabType
tabtype1=tabBuilder.buildLenovoTab(); tabtype1.showItems(); TabType
tabtype2=tabBuilder.buildMicroMaxTab(); tabtype2.showItems(); } }

Izlaz:

U gornjem primjeru izgradili smo cjeloviti sustav naručivanja tableta za dvije marke tableta, tj. Lenovo i
Micromax. To su klase concreteBuilder koje nasljeđuju od apstraktne klase tvrtke. Tada imamo TabBuilder
klasu koja gradi narudžbe za obje klase tableta.
Često postavljana pitanja

P # 1) Što su uzorci dizajna u Javi? Koje su vrste obrazaca dizajna u Javi?

Odgovor: Uzorci dizajna najbolja su praksa koja se može koristiti za razvijanje dobro provjerenih rješenja.

Java ima tri vrste obrazaca dizajna:

 Kreativni dizajn: Tvornički uzorak, Sažetak Tvornički uzorak, pojedinačni uzorak, uzorak
graditelja i uzorak prototipa primjeri su kreativnih uzoraka dizajna. Oni su uglavnom uključeni u
stvaranje predmeta.
 Uzorak strukturnog dizajna: Uglavnom se koriste za stvaranje strukture klase. Adapter, most i
kompozitni uzorak popularni su uzorci strukturnog dizajna.
 Uzorak dizajna ponašanja: Oni pružaju bolju interakciju između objekata zajedno s fleksibilnošću
za jednostavno proširenje implementacije. Uzorci promatrača, strategije, itd. Neki su primjeri
obrazaca ponašanja.

P # 2) Zašto se koriste uzorci dizajna?

Odgovor: Uzorci dizajna pružaju nam dokazani i provjereni model rješenja koji možemo koristiti za
rješavanje složenih problema. Uzorci dizajna omogućuju nam izgradnju kohezivnih modula s labavom
spojnicom. Uzorci dizajna također čine interakciju između dizajnera učinkovitijom i djelotvornijom.

P # 3) Koji su primjeri uzoraka?

Odgovor: Primjeri prirodnih obrazaca su vidljive zakonitosti koje se nalaze u prirodi. Prirodni uzorci poput
simetrija, drveća, valova, pjena, pruga, pukotina itd. Neki su primjeri prirodnih uzoraka.

P # 4) Je li MVC obrazac dizajna?

Odgovor: Da, to je vrsta dizajnerskog uzorka pomoću kojeg možemo izgraditi aplikaciju koja se sastoji od
podatkovnog modela, prezentacije ili sloja prikaza i kontrolera. Možemo ga više klasificirati kao
arhitektonski obrazac.

Zaključak
Ovim je završena naša rasprava o uzorcima dizajna u Javi. Iako Java podržava tri vrste obrazaca dizajna,
naime. Kreativni, strukturni i bihevioralni obrasci, više nas zanima uzorak kreativnog dizajna.
Prosto rečeno, projektni obrasci predstavljaju akumulirano iskustvo “starih” i iskusnih programera u
rešavanju nekih osnovnih programerskih problema iz oblasti objektnog programiranja.

Posao softverskih inženjera je pre svega rešavanje softverskih problema. To su problemi koje su drugi
inženjeri verovatno već rešavali veliki broj puta u različitim oblicima. Tokom kreiranja softvera primenom
objektno-orjentisanog pristupa, veliki broj obrazaca, principa i slučajeva najbolje prakse je otkriven,
imenovan i unet u katalog. Poznavanjem ovih obrazaca i uobičajenih rešenja, inženjeri mogu da „razbijaju“
složene probleme i razviju aplikacije sa oprobanim i pouzdanih rešenjima.

Projektni obrasci (design patterns) predstavljaju apstraktne primere rešenja na visokom nivou. Njih treba
posmatrati kao plan u rešavanju problema, a ne kao samo rešenje. Gotovo je nemoguće pronaći okvir
(framework) koji će biti primenjen kako bi se kreirala cela aplikacija. Umesto toga, inženjeri vrše
uopštavanje problema kako bi prepoznali obrasce koje treba da primene. Projektni obrasci imaju za cilj
ponovnu upotrebu postojećih rešenja. Iako nisu svi problemi jednaki, ako je moguće posmatrani problem
„razbiti“ i naći sličnosti sa problemima koji su ranije bili rešavani, onda je moguće primeniti uniformno
rešenje nad njim. Većina problema na koje se nailazi tokom programiranja je već rešena nebrojeno
puta, pa verovatno postoji i obrazac koji može pomoći u implementaciji.

Obrasci su nastali kao rezultat dobre prakse i iskustva programera. Skup najvažnijih i najčešće korišćenih
obrazaca je skupljen i objavljen u knjizi Design Patterns: Elements of Reusable Object-Oriented Software,
koju su napisali Erich Gamma, Richard Helm, Ralph Johnson i John Vlissides, poznati kao Gang of Four.

Obrasci su ključni za dizajn i razvoj softvera. Oni omogućavaju izražavanje namera kroz zajednički
rečnik, kada se problemi rešavaju prilikom projektovanja, tako i tokom kreiranja samog koda. Obrasci
promovišu upotrebu dobrog dizajna objektno-orjentisanog softvera. Oni predstavljaju efikasan način da se
opiše rešenje kompleksnih problema. Sa poznavanjem dizajn paterna, moguća je brza komunikacija unutar
tima bez obraćanja pažnje na detalje implementacije niskog nivoa. Njihova posebna vrednost se nalazi u
činjenici da su to oprobana i testirana rešenja.

Obrasci su nezavisni od korišćenog programskog jezika. Njihova primena je identična u svim objektno-
orjentisanim programskim jezicima.

Međutim, ne zahtevaju svi problemi primenu dizajn paterna. Tačno je da obrasci mogu učiniti da
kompleksni problemi postanu jednostavni, ali oni takođe mogu jednostavne probleme učiniti
kompleksnim. Nakon prvog upoznavanja sa dizajn paternima, mnogi inženjeri upadaju u problem da
pokušavaju da primene obrasce na svaki deo koda. Ovim se postiže suprotan efekat od željenog, odnosno,
sam softver se dodatno komplikuje.

Svaki uzorak je trodijelno pravilo, koje izražava odnos između određenog konteksta, problema i rješenja.
Također nalazimo mnoge obrasce u softverskoj arhitekturi. Stručnjaci u softversko inženjerstvo poznaje ove obrasce
iz praktičnog iskustva i slijedite ih u razvoju aplikacija sa specifičnim svojstvima. Koriste ih za učinkovito i elegantno
rješavanje problema dizajna.

Obrasci za oblikovanje
Obrazac za oblikovanje (engleski design pattern) je apstraktni design. On definira uspjeˇsno rjeˇsenje za
dobro poznati problem koji se ˇcesto pojavljuje u raznim kontekstima. Ukoliko se susretnemo s takvim
problemom, tada ga moˇzemo rijeˇsiti primjenom odgovaraju´ceg obrasca. Na taj naˇcin dolazi do ponovne
upotrebe, ali ne programskog koda nego designa. Rjeˇsenje koje ponovno upotrebljavamo oslobodeno
je implementacijskih detalja, ˇsto moˇze biti prednost budu´ci da detalji stare implementacije mogu biti
neprimjenjivi unutar nove.
Obrasci za oblikovanje nastaju kao pokuˇsaj da se dokumentira skupljena mudrost i iskustvo u rjeˇsavanju
problema. Skupljanje mudrosti prisutno je u gotovo svom granama raˇcunarstva: tradicionalne knjige o
strukturama podataka i algoritmima takoder nastoje opisati provjerena rjeˇsenja za ˇceste programerske
probleme. Ipak, kad govorimo o obrascima za oblikovanje, tada mislimo na noviji pristup (Gamma et
al, 1995) koji je nastao u okviru objektnog oblikovanja, gdje se rjeˇsenje izraˇzava kao objektni model
od nekoliko apstraktnih klasa.
U obrascu za oblikovanje moraju biti prisutna sljede´ca ˇcetiri elementa.
1. Smisleno ime za obrazac.
2. Opis problema, iz kojeg je vidljivo kad se obrazac moˇze primijeniti.
3. Opis rjeˇsenja, koji objaˇsnjava dijelove predloˇzenog designa, te odnose izmedu tih dijelova. Opis
rjeˇsenja obiˇcno se naslanja na dijagram (klase, nasljedivanje, druge vrste veza, . . . ).
4. Opis posljedica, koji nabraja prednosti i mane primjene predloˇzenog obrasca.
Kao primjer obrasca za oblikovanje, navodimo “Observer pattern” u Prilogu 3.36. Ovaj obrazac koristi
se onda kad se traˇze razliˇciti prikazi stanja istog objekta. Obrazac razdvaja objekt i njegove prikaze.
To je ilustirano Prilogom 3.37 gdje vidimo dva grafiˇcka prikaza istog skupa podataka. Rjeˇsenje unutar
“Observer pattern” dano je objektnim modelom u Prilogu 3.38 nacrtanim prema pravilima UML.
Rjeˇsenje je rijeˇcima objaˇsnjeno u polaznom Prilogu 3.36.

Article I. generičkih klasa u Javi


https://gocoding.org/bs/izgradnja-generi%C4%8Dkih-klasa-u-Javi-sa-razli%C4%8Ditim-tipovima/

Što je mikroservis?
Mikroservisi su softverski arhitektonski obrazac koji strukturira aplikaciju kao skup malih, neovisnih
procesa koji se koriste za određene poslovne sposobnosti. Microservices je pristup modularizaciji softvera
dizajniranog za rješavanje specifičnih sitnih poslovnih funkcionalnosti. Koristi module koji se izvode kao
različiti procesi, što znači da potiče izgradnju softverske aplikacije kao skupa neovisnih usluga. Jednostavno
rečeno, arhitektura Microservicesa odnosi se na ronjenje aplikacije ili sustava na manje, neovisne dijelove
temeljene na načelu jedinstvene odgovornosti. Jedinstvena odgovornost znači da svaki mikroservis ima skup
dobro definiranih značajki i trebao bi se pokrenuti u zasebnom procesu kao usluga.

Arhitektura mikroservisa podrazumijeva razvoj pojedinačne aplikacije kao skupa malih i neovisnih usluga koje se
samostalno razvijaju i implementiraju.

Mikroservisi imaju neovisno spremanje podataka, što znači da će svaki mikroservis biti neovisna usluga i ne dijeli
zajedničko pohranjivanje podataka među sobom. Spremanje podataka donosi svoj niz prednosti i nedostataka.
Komunikacija među mikroservisima trebala bi se odvijati samo putem zajedničkog skupa protokola, kao što je HTTP

Kako su mikroservisi samostalni, svaka promjena mikroservisa može se ispitati i implementirati samostalno. To vam
olakšava koncentraciju na poslovnu sposobnost jedne mikroservise umjesto da razmišljate o cijeloj aplikaciji.
Promjene potrebne za nove značajke ograničene su na pojedinačne mikroservise.

Mikroservisi su s druge strane skloniji kvarovima zbog širenja usluga i njihove inter-servisne mrežne komunikacije.
Dati je program mikroservisa zbirka neovisnih, autonomnih servisa i ako jedan ili više usluga ne moraju srušiti cijelu
aplikaciju.

Pitanje: Šta su obrasci dizajna u arhitekturi softvera?


U softverskom inženjerstvu, obrazac dizajna je opšte ponovljivo rešenje za uobičajeni problem u dizajnu
softvera. Obrazac dizajna nije gotov dizajn koji se može direktno transformisati u kod. To je opis ili šablon
za rješavanje problema koji se može koristiti u mnogim različitim situacijama.

Šta su arhitektonski obrasci dizajna?


Arhitektonski obrazac je opšte, višekratno upotrebljivo rešenje za uobičajeni problem u softverskoj
arhitekturi u datom kontekstu. … Arhitektonski obrasci su slični obrascima dizajna softvera, ali imaju širi
opseg.

Šta je koncept dizajnerskog uzorka?


Dizajnerski obrazac je višekratni oblik rješenja za problem dizajna. Ideju je uveo arhitekta Christopher
Alexander i prilagođena je za razne druge discipline, posebno softversko inženjerstvo.

Što je obrazac dizajna objasniti na primjeru?


Dizajnerski obrasci pružaju standardnu terminologiju i specifične su za određeni scenario. Na primjer,
singleton obrazac dizajna označava korištenje jednog objekta tako da će svi programeri upoznati sa
jedinstvenim dizajnom uzorka koristiti jedan objekat i mogu reći jedni drugima da program slijedi singleton
obrazac.

Koji su različiti obrasci dizajna?


Postoji pet dobro poznatih dizajnerskih obrazaca koji se mogu implementirati u širokom spektru
programskih jezika:

Apstraktni tvornički uzorak.


Builder Pattern.
Obrazac tvorničke metode.
Prototype Pattern.
Singleton Pattern.
Koja su tri arhitektonska obrasca?
Primjeri arhitektonskih obrazaca su mikrousluge, sabirnica poruka, zahtjev za uslugu/potrošač, MVC,
MVVM, mikrokernel, n-sloj, dizajn vođen domenom i kontrola apstrakcije prezentacije.

Koja je prednost dizajnerskog uzorka?


Obrasci ne daju rješenja, oni inspirišu rješenja. Obrasci eksplicitno obuhvataju stručno znanje i kompromise
u dizajnu i čine ovu stručnost široko dostupnom. Olakšajte prelazak na objektno orijentisanu tehnologiju.

Koja su 23 uzorka dizajna?

Koje su tri vrste programskog dizajna?


Tri vrste uzoraka dizajna (Bihevioralni, Kreativni, Strukturalni) Napravite razliku između obrazaca
ponašanja, kreacije i strukturalnog dizajna.

Šta očekujete od uzorka dizajna?


Dizajnerski obrasci pružaju zajednički vokabular za dizajnere koji će koristiti za komunikaciju,
dokumentiranje i istraživanje alternativa dizajna. Dizajnerski obrasci čine da sistem izgleda manje složen
tako što vam omogućava da o njemu govorite na višem nivou apstrakcije od dizajna notacije ili programskog
jezika.

You might also like