Last updated
Last updated
Моделът на посетителя се използва, когато трябва да извършим операция на група от подобен вид обекти. С помощта на посетителския модел можем да преместим оперативната логика от обектите в друг клас. Например, помислете за количка за пазаруване, където можем да добавяме различни видове артикули (Елементи). Когато кликнем върху бутона за плащане, той изчислява общата сума, която трябва да бъде платена. Сега можем да имаме логиката на изчисление в класовете на елементите или можем да преместим тази логика в друг клас, използвайки посетителски модел. Нека приложим това в нашия пример за посетителски модел.
За да приложим посетителския модел, на първо място ще създадем различни видове артикули (елементи), които да се използват в количката за пазаруване.
Забележете, че методът за приемане приема аргумента на посетителя. Можем да имаме някои други методи, също специфични за елементите, но за простота не навлизам в толкова много подробности и се фокусирам само върху модела на посетителите. Нека да създадем някои конкретни класове за различни видове елементи.
Обърнете внимание на внедряването на метод accept() в конкретни класове, неговия извикващ метод visit() на Visitor и предаването му като аргумент. Имаме метод visit() за различен тип елементи в интерфейса на посетителя, който ще бъде имплементиран от конкретен клас посетител.
Сега ще внедрим интерфейс за посетители и всеки артикул ще има собствена логика за изчисляване на разходите.
Когато тичаме над клиентската програма на посетителския модел, получаваме следния изход.
Забележете, че имплементацията, ако методът accept() във всички елементи е еднакъв, но може да бъде различен, например може да има логика да се провери дали елементът е свободен, след което изобщо не се обаждайте на метода visit().
Ползата от този модел е, че ако логиката на операцията се промени, тогава трябва да направим промяна само в имплементацията на посетителя, вместо да го правим във всички класове елементи. Друго предимство е, че добавянето на нов елемент към системата е лесно, ще изисква промяна само в интерфейса и изпълнението на посетителите и съществуващите класове елементи няма да бъдат засегнати.
Недостатъкът на модела на посетителите е, че трябва да знаем типа на връщане на методите за посещение по време на проектирането, в противен случай ще трябва да променим интерфейса и всички негови реализации. Друг недостатък е, че ако има твърде много реализации на интерфейса на посетителите, това затруднява удължаването. Това е всичко за модела на дизайна на посетителите, уведомете ме, ако съм пропуснал нещо. Моля, споделете го и с другите, ако ви е харесало.