design patterns java
У овом упутству ћемо разговарати о дизајнерским узорцима у Јави. Проучићемо обрасце Синглетон, Фацтори и Буилдер са примерима и предностима:
Када решимо одређени проблем, можемо га решити ефикасније ако имамо већ одређене најбоље праксе. Ово ће нам заиста помоћи да следимо ове најбоље праксе и развијемо поузданија решења.
Ове најбоље праксе који се може користити за развој добро доказана решења за решавање проблема називају се „ Дизајн образаца ”. Искусни програмери ООП софтвера користе обрасце дизајна за решавање одређених задатака.
=> Овде погледајте водич за почетнике Јава
Шта ћете научити:
- Дизајн образаца у Јави
- Синглетон образац у Јави
- Фабрички образац у Јави
- Узорак градитеља у Јави
- Закључак
Дизајн образаца у Јави
Обрасце за дизајн први је изумео Цхристопхер Алекандер 1977. Али касније су четворица програмера, наиме Ерицх Гамма, Рицхард Хелм, Јохн Влиссидес и Ралпх Јохнсон, написали књигу под називом „ Банда образаца са четири дизајна, елементи вишеструко објектно оријентисаног софтвера ”1995. године.
Од тада су сви обрасци дизајна постали познати као „ Банда од четири узорка дизајна ”.
пример спајања сорти ц ++
Обрасци дизајна су независни од било којих програмских језика, јер се користе за решавање уобичајених објектно оријентисаних проблема дизајна, а нису ограничени само на одређени програмски језик. Дакле, у основи је то идеја, а не примена.
Тако користећи дизајнерске обрасце можемо развити програме који су ефикаснији, флексибилнији, одрживији и могу се поново употребити.
Предности дизајнерских образаца
У наставку су наведене неке од предности коришћења образаца дизајна у нашим апликацијама:
- Узорци дизајна могу се поново користити и могу их користити више пројеката.
- Архитектуру система можемо дефинисати помоћу образаца дизајна.
- Обрасци дизајна пружају транспарентност дизајну апликације.
- Узорци дизајна су већ добро тестирани и доказани како бисмо их могли користити без бриге.
- Обрасци дизајна омогућавају нам да градимо боље системе и такође пружају јасноћу у архитектури система.
Када користити обрасце дизајна
Па када бисмо тачно требали да користимо дизајнерске обрасце?
Обично користимо образац дизајна током почетне фазе анализе и захтева СДЛЦ (животни циклус развоја софтвера). Када се користи током фазе анализе и захтева СДЛЦ-а, пружа више информација о овој фази. Јава интерно подржава обрасце дизајна.
Узорци дизајна у Јави категорисани су на следећи начин:
Што се овог водича тиче, нас занимају само креативни обрасци дизајна.
Обрасци креативног дизајна даље су класификовани на следећи начин:
У овом упутству ћемо разговарати о следећим обрасцима дизајна:
- Једнокраки дизајн
- Образац за фабрички дизајн
- Узорак дизајнера градитеља
Почнимо са једноструким узорком дизајна на Јави.
Препоручена литература = >> Дизајн образаца за апликације засноване на тиквицама
Синглетон образац у Јави
Једнокраки образац је врста креативног узорка на Јави. Синглетон образац је образац дизајна у којем је у Јава виртуелној машини присутан само један примерак класе. Класа синглетон (која примењује синглетон образац) мора да обезбеди глобалну приступну тачку да би добила инстанцу класе.
Другим речима, једноструки образац ограничава инстанцирање класе. Синглетон образац се користи у имплементацији дневника за апликације. Такође се користи у имплементацији спремишта нити или у кеш меморији.
Јава часови, јава.авт.Десктоп и јава.ланг.рунтиме такође користите једнокрачни узорак.
Предности
- Како се користи само један примерак класе синглетон, штедимо меморију.
- Такође, осигурава поновну употребу јер се исти појединачни објект користи изнова и изнова.
Сада пређимо на примену синглетон обрасца.
Примена Синглетон обрасца
Као што је већ поменуто, једнокрачни образац дизајна ограничава класу само једном инстанцом и овој инстанци се даје глобална тачка приступа. Ово су биле све класе које се изнова односе на исти објекат.
Следећи УМЛ дијаграм објашњава Синглетон образац.
Као што показује горњи УМЛ дијаграм, синглетон класа има дефинисану једну инстанцу и приступамо јој методом гетИнстанце (). Дакле, појединачна фабрика која је одговорна за стварање објеката користи методу гетИнстанце за враћање истог објекта (који се налази у класи) изнова и изнова.
Па како да применимо Синглетон образац у програм?
Креирамо синглетон класу и имамо њен конструктор као „привате“ тако да класа не може бити инстанцирана. Затим креирамо приватну инстанцу ове синглетон класе унутар саме класе. Тада имамо посебну јавну методу гетИнстанце () која враћа синглетон објекат у спољни свет.
Ова примена ове синглетон класе, како је горе објашњено, приказана је у Јава програму испод.
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(); } }
Излаз:
Сада ако проверимо главни метод, имајте на уму да ако покушавамо да креирамо објекат класе синглетон помоћу новог оператора, компајлер ће дати грешку при компилацији (погледајте коментарисани код у главној методи). Објекат класе синглетон добијамо методом гетИнстанце (), а затим га можемо користити као и обично за приступ методама.
Фабрички образац у Јави
Фабрички образац се на Јави назива и „Фабрички образац методе“ или „Виртуелни конструктор“. У овом обрасцу креирамо интерфејс или апстрактну класу са декларацијама метода, а затим су конкретне класе или поткласе које имплементирају овај интерфејс или наслеђују класу одговорне за стварање инстанци класе.
Предности
- Фабрички образац је врста креативног узорка и најчешће се користи образац у Јави.
- Коришћењем фабричког узорка осигуравамо да стварна логика стварања није изложена спољном свету.
Дакле, ако класа која примењује фабрички образац има метод за израчунавање каматне стопе, тада ће конкретне класе применити ову класу, а такође ће применити методу за израчунавање каматне стопе.
Тада ће постојати друга класа која је фабричка, која ће приступити овим конкретним примерима класе, тако да нисмо свесни како се примењује логика за израчунавање каматне стопе. Позивамо само методу и добијамо излаз.
Па када тачно можемо да користимо образац фабричке методе?
Када родитељске класе одлуче да делегирају стварање инстанци у своје подкласе, тада можемо да одаберемо фабрички образац (Ово је објашњено горе). Такође можемо да користимо фабричку методу када класа не зна које подкласе треба створити.
Сада да видимо примену узорка фабричке методе.
Примена фабричког обрасца
Као пример, применимо генерички интерфејс облика. Из овог интерфејса можемо извести разне конкретне класе попут круга, правоугаоника итд. Тада ћемо имати класу схапеФацтори која ће приступити објектима конкретне класе. УМЛ за овај образац приказан је испод.
Као што је већ објашњено, ово је УМЛ дијаграм за фабрички образац. Сада ћемо применити Јава програм који демонстрира фабрички образац.
//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(); } }
Излаз:
Узорак градитеља у Јави
У обрасцу Буилдер, користимо корак по корак за изградњу сложеног објекта користећи мале и једноставне објекте.
Дакле, кад год наиђемо на објекат који не може да се креира у једном кораку, идемо на образац градитеља.
Предности
- Користећи образац Буилдер, можемо раздвојити конструкцију и приказ објекта.
- Такође можемо променити унутрашњу представу објекта.
- Можемо да градимо сложене дизајне попут читавог система испоруке користећи образац градитеља.
Практични пример узорака Буилдер је систем наручивања хране који је подразумевао сложене кораке прикупљања наручених намирница, затим паковања, наплате, наручивања и слања.
У овом упутству ћемо применити пример система за наручивање таблета који користи образац Буилдер.
Имплементација узорака градитеља
Општи УМЛ дијаграм за образац Буилдер дат је у наставку.
Горњи дијаграм приказује УМЛ дијаграм обрасца Буилдер. Као што је приказано на горњем дијаграму, имамо четири компоненте у обрасцу Буилдер.
- Производ: Ово представља сложени објекат који треба изградити.
- Градитељ Апстрактна класа: Апстрактна класа која садржи прототипове свих функционалности потребних за изградњу сложеног објекта.
- Класа ЦонцретеБуилдер: Ово је конкретна класа која наслеђује класу Буилдер и креира одређени сложени објекат. Можемо имати онолико класа ЦонцретеБуилдер колико нам је потребно.
- Класа режисера: Ова класа контролише алгоритме који генеришу коначни производ.
Следећи пример програмирања приказује демонстрацију Буилдер обрасца помоћу система наручивања таблета за наручивање таблета.
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(); } }
Излаз:
У горњем примеру направили смо комплетан систем за наручивање таблета за две марке таблета, тј. Леново и Мицромак. То су класе цонцретеБуилдер које наслеђују од компаније са апстрактним класама. Тада имамо класу ТабБуилдер која гради поруџбине за обе класе таблета.
Често постављана питања
П # 1) Шта су дизајнерски обрасци у Јави? Које су врсте образаца дизајна у Јави?
јмс интервју питања и одговори за искусне
Одговор: Обрасци дизајна су најбоље праксе које се могу користити за развијање добро тестираних решења.
Јава има три врсте образаца дизајна:
- Креативни образац дизајна: Фабрички узорак, Сажетак Фабрички узорак, Синглетон узорак, Буилдер узорак и узорак прототипа примери су креативних образаца дизајна. Они су углавном укључени у стварање предмета.
- Образац структурног дизајна: Углавном се користе за стварање структуре класе. Адаптер, мост и композитни узорак су популарни структурни обрасци дизајна.
- Узорак дизајна понашања: Они пружају бољу интеракцију између објеката заједно са флексибилношћу за лако проширење примене. Обрасци посматрача, образац стратегије итд. Су неки примери образаца понашања.
П # 2) Зашто се користе обрасци дизајна?
Одговор: Обрасци дизајна пружају нам доказани и тестирани модел решења који можемо користити за решавање сложених проблема. Обрасци дизајна омогућавају нам да градимо кохезивне модуле са лабавом спојницом. Узорци дизајна такође чине интеракцију између дизајнера ефикаснијом и ефективнијом.
П # 3) Који су примери образаца?
Одговор: Примери природних образаца су видљиве законитости које се налазе у природи. Природни обрасци попут симетрија, дрвећа, таласа, пене, пруга, пукотина итд. Су неки примери природних образаца.
П # 4) Да ли је МВЦ образац дизајна?
Одговор: Да, то је врста дизајнерског обрасца помоћу којег можемо да направимо апликацију која се састоји од модела података, презентације или слоја приказа и контролера. Можемо је више класификовати као архитектонски образац.
Закључак
Овим је завршена наша дискусија о дизајнерским обрасцима у Јави. Иако Јава подржава три врсте образаца дизајна, наиме. Креативни, структурни и бихевиорални обрасци, више нас занимају креативни обрасци дизајна.
Према обиму овог водича, разговарали смо о три примера креативних дизајнерских образаца, наиме, једнокраки образац, фабрички образац и образац градитеља.
Синглетон узорак је најједноставнији дизајн, а фабричка метода би требало да буде уобичајени образац дизајна који се широко користи. Узорак градитеља користи се за конструкцију сложених објеката и углавном се користи за развој сложених апликација.
=> Овде погледајте савршен водич за обуку за Јава.
Препоручено читање
- Јава Стринг са Стринг бафером и Стринг Буилдер Туториал
- Примена Јава-а: Стварање и извршавање Јава ЈАР датотеке
- Основе Јава-а: Јава синтакса, Јава Цласс и основни Јава концепти
- Јава виртуелна машина: како ЈВМ помаже у покретању Јава апликације
- Водич за ЈАВА за почетнике: 100+ практичних Јава видео водича
- Јава Интегер и Јава БигИнтегер класа са примерима
- Јава компоненте: Јава платформа, ЈДК, ЈРЕ и Јава виртуелна машина
- Листа важних Јава кључних речи - резервисане речи на Јави