Одноразовий відвідувач (шаблон поведінки)

Одноразовий відвідувач (англ. Single-serving visitor) — шаблон поведінки. Призначений для оптимізації роботи шаблону відвідувач (Visitor). Використовується лише один раз, після закінчення всіх операцій він видаляється(у більшості випадків).

Використання

Цей шаблон поведінки є особливим випадком використання паттерна «відвідувач», тому його потрібно застосовувати у певних особливих випадках, таких як:

  • В програмі має бути тільки один екземпляр такого відвідувача. В певних випадках можна реалізувати такого відвідувача, як одинака. При цьому можна бути впевненим, що відвідувач може бути викликаний пізніше без змін параметрів.
  • Він є особливим випадком реалізації паттерна «відвідувач», тож він також описує операцію, яка виконується над об'єктами інших класів, він може виконати ті ж самі функції, що і у випадку звичайного паттерну «відвідувач», але після виконання ним заданих функцій він видаляється.
  • Після виконання певної операції програми, не потрібно щоб відвідувачі залишитися в пам'яті. Це часто трапляється при відвідуванні великої кількості об'єктів, або ієрархії (наприклад, коли шаблон відвідувач використовується разом з шаблоном Компоновщик) для виконання одного завдання на ньому.
  • Шаблон регулярного відвідувача слід використовувати, коли відвідувач повинен залишитися в пам'яті. Це потрібно для того щоб встановити відвідувачем ряд налаштувань, які будуть збережені в пам'яті для пізнього використання відвідувачем.

Приклади використання

Паттерн одноразового відвідувача викликається через проміжні слої статичних методів

Реалізація на C++

Без параметрів:

Element* elem;
      SingleServingVisitor::apply_to(elem);

З параметрами:

Element* elem;
 TYPE param1, param2;
 SingleServingVisitor::apply_to(elem, param1, param2);

Реалізація на C#

Без параметрів:

public static Element elem;
       SingleServingVisitor.apply_to(elem);

З параметрами:

public static Element elem;
	 public static TYPE param1 = new TYPE();
	 public static TYPE param2 = new TYPE();
	 SingleServingVisitor.apply_to(elem, param1, param2);

Наслідки

Переваги

- Відвідувачі викликаються при необхідності і можуть знищуватися без будь-якої шкоди. Тим самим не створюючи "зомбованих об'єктів"

- Відвідувач створюється, використовується і знищується від єдиного виклику певного статичного методу який був для цього призначений.

Недоліки

- Є істотний недолік у тому, що одноразовий відвідувач при виклику певного методу, він спочатку створюється, а потім знищується, це непродуктивна операція, яка забирає достатньо велику кількість часу.

Передавання параметрів

Якщо одноразовий відвідувач був ініціалізований, то параметри повинні передаватися через статичний метод:

Реалізація на C++

void SingleServingVisitor::apply_to(Element* elem, TYPE param1, TYPE param2, ...) 
{
    SingleServingVisitor ssv(param1, param2, ...);
    elem.accept(&ssv);
}

Реалізація на C#

public partial class SingleServingVisitor
{
	public void apply_to(Element elem, TYPE param1, TYPE param2, ... )
	{
		SingleServingVisitor ssv = new SingleServingVisitor(param1, param2, ...);
		elem.accept(ssv);
	}
}

Використання як одинака (singleton)

Така реалізація забезпечує:

- Не більше одного екземпляра самообслуговуючого відвідувача

- Доступ до відвідувача може бути надано пізніше


Реалізація на C++

// Призначення
class SingleServingVisitor {
protected:
    static SingleServingVisitor* instance_;
    TYPE param1_;
    TYPE param2_;
    SingleServingVisitor();
    static SingleServingVisitor* get_instance();
    // Зауваження: метод get_instance не повинен бути публічним 
public:
    ~SingleServingVisitor();
    static void apply_to(Element*);
    //статичні методи для доступу до параметрів
    static void set_param1(TYPE);
    static void set_param2(TYPE);
 
    virtual void visit_ElementA(ElementA*) = 0;
    virtual void visit_ElementB(ElementB*) = 0;
}
// Реалізація
SingleServingVisitor* SingleServingVisitor::instance_ = NULL;
SingleServingVisitor* SingleServingVisitor::get_instance() 
{
    if (this->instance_ == NULL)
        this->instance_ = new SingleServingVisitor();
    return this->instance_;
}
void SingleServingVisitor::apply_to(Element* elem) 
{
    elem->accept(get_instance());
}
void SingleServingVisitor::set_param1(TYPE param1) 
{
    getInstance()->param1_ = param1;
}
void SingleServingVisitor::set_param2(TYPE param2) 
{
    getInstance()->param2_ = param2;
}

Реалізація на C#

// Призначення
public abstract class SingleServingVisitor
{
	protected static SingleServingVisitor instance_ = null;
	protected TYPE param1_ = new TYPE();
	protected TYPE param2_ = new TYPE();
	// Реалізація

	protected static SingleServingVisitor get_instance()
	{
		if (this.instance_ == null)
			this.instance_ = new SingleServingVisitor();
		return this.instance_;
	}

	// Зауваження: метод get_instance не повинен бути публічним
        SingleServingVisitor(); 
	public static void apply_to(Element elem)
	{
		elem.accept(get_instance());
	}

	//статичні методи для доступу до параметрів
	public static void set_param1(TYPE param1)
	{
		getInstance().param1_ = param1;
	}

	public static void set_param2(TYPE param2)
	{
		getInstance().param2_ = param2;
	}

	public abstract void visit_ElementA(ElementA NamelessParameter);

	public abstract void visit_ElementB(ElementB NamelessParameter);
}

Read other articles:

Artikel ini memberikan informasi dasar tentang topik kesehatan. Informasi dalam artikel ini hanya boleh digunakan untuk penjelasan ilmiah; bukan untuk diagnosis diri dan tidak dapat menggantikan diagnosis medis. Wikipedia tidak memberikan konsultasi medis. Jika Anda perlu bantuan atau hendak berobat, berkonsultasilah dengan tenaga kesehatan profesional. Distemper anjingInformasi umumNama lainHard pad disease, food pad diseaseSpesialisasiKedokteran hewanPenyebabCanine morbillivirus (dulu diseb...

 

Aimé Lepercq Aimé Lepercq en 1944. Fonctions Ministre des Finances 4 septembre 1944 – 9 novembre 1944 (2 mois et 5 jours) Gouvernement Charles de Gaulle I Prédécesseur Pierre Mendès France Successeur René Pleven Biographie Nom de naissance Aimé Marie Antoine Lepercq Date de naissance 2 septembre 1889 Lieu de naissance Collonges-au-Mont-d'Or (France) Date de décès 9 novembre 1944 (à 55 ans) Lieu de décès Harnes (France) Nationalité France modifier  Aimé Mar...

 

Chinese author (born 1960) For the rower, see Yu Hua (rower). In this Chinese name, the family name is Yu. Yu HuaYu Hua at the 2005 Singapore Writers FestivalNative name余华Born (1960-04-03) April 3, 1960 (age 64)Hangzhou, Zhejiang, China[1]OccupationNovelist, essayistLanguageChineseNationalityChineseAlma materLu Xun Literature SchoolPeriod1984 – presentGenreNovel, proseLiterary movementAvant-gardeNotable worksTo Live (1993) Chronicle of a Blood Merchant (1995) Brothers ...

Czech and Slovakian tradition Czech Pomlázka (handmade whip) A Pomlázka in use; by Marie Gardavská (1871–1937) In the Czech Republic, Poland, Slovakia, and some parts of Hungary, the Easter whip is used as part of a tradition where boys are splashed with water and girls whipped with a decorated willow branch on Easter Monday. The tradition typically takes place in the morning of Easter Monday and involves a special handmade whip or switch called pomlázka or karabáč (in Czech) or korb�...

 

American media conglomerate (1939–1999) Taft Broadcasting CompanyFormerlyRadio Cincinnati, Inc. (1939–1959)Company typeCorporationIndustrytelevision and radio networkFounded1939; 85 years ago (1939)Defunct1999; 25 years ago (1999)FateAcquired by Clear Channel CommunicationsSuccessorsRadio:iHeartMediaLibrary:Warner Bros. Domestic Television Distribution(Hanna-Barbera and pre-1991 Ruby-Spears library only)Endemol Shine Australia(Hanna-Barbera Pty, Ltd./Ta...

 

Kendo(剣道 kendō)FokussenjataKekerasansemi-kontakNegara asalJepangPenciptaNaganuma Sirōzaemon Kunisato (長沼 四郎左衛門 国郷), attributedOrang tuakenjutsuOlahraga olimpiktidak Kendo (剣道code: ja is deprecated , kendō) adalah seni bela diri modern dari Jepang yang menggunakan pedang. Kendo berasal dari kata ken (剣) yang artinya pedang, dan dō (道) yang artinya jalan. Jadi arti kendo secara keseluruhan adalah suatu jalan/proses disiplin diri yang membentuk suatu pribadi sam...

German politician Maria NoichlMEPMember of the European ParliamentIncumbentAssumed office 1 July 2014ConstituencyGermany Personal detailsBorn (1967-01-09) 9 January 1967 (age 57)Rosenheim, Bavaria, GermanyPolitical party GermanSocial Democratic Party European UnionParty of European Socialists Maria Noichl (born 9 January 1967) is a German politician and member of the European Parliament representing Germany since July 2014. She is a member of the Social Democratic Party, pa...

 

Gettin' Tighter redirects here. For the song by Tom Robinson & the Voice Squad, see Getting Tighter. 1975 studio album by Deep PurpleCome Taste the BandStudio album by Deep PurpleReleased7 November 1975 (1975-11-07)[1][2]Recorded3 August – 1 September 1975StudioMusicland (Munich)Genre Hard rock funk rock[3] Length37:16LabelPurpleProducerMartin BirchDeep PurpleDeep Purple chronology Stormbringer(1974) Come Taste the Band(1975) Perfect Strang...

 

سوجو (مدينة) (بالصينية: 苏州市)‏     خريطة الموقع تقسيم إداري البلد الصين  [1][2] التقسيم الأعلى جيانغسو (1 يناير 1962–)  خصائص جغرافية إحداثيات 31°18′00″N 120°37′10″E / 31.3°N 120.61944444444°E / 31.3; 120.61944444444   [3] المساحة 8657.32 كيلومتر مربع  الارتفاع 5 متر...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Vale do Aço metropolitan area – news · newspapers · books · scholar · JSTOR (May 2008) (Learn how and when to remove this message) Metropolitan Area of Brazil in SoutheastVale do Aço Metropolitan AreaMetropolitan Area of BrazilCoordinates: 19°55′8.88″S 4...

 

Lillestrøm Sportsklubb Kvinner FotballklubbCalcio Segni distintiviUniformi di gara Casa Trasferta Colori socialiGiallo, nero Dati societariCittàLillestrøm Nazione Norvegia ConfederazioneUEFA Federazione NFF CampionatoToppserien Fondazione1989 Allenatore Hege Riise StadioLSK-Hallen(1 500 posti) Sito weblsk-kvinner.no PalmarèsTitoli nazionali7 campionati norvegesi Trofei nazionali6 Coppe di Norvegia Dati aggiornati al 23 novembre 2019Si invita a seguire il modello di voce Il Lilles...

 

New Zealand politician For the association footballer, see William Anderton. The HonourableBill Anderton16th Minister of Internal AffairsIn office12 December 1957 – 12 December 1960Prime MinisterWalter NashPreceded bySidney Walter SmithSucceeded byLeon GötzMember of the New Zealand Parliamentfor EdenIn office27 November 1935 – 27 November 1946Preceded byArthur StallworthySucceeded byWilfred FortuneMember of the New Zealand Parliamentfor Auckland CentralIn office27 Novem...

Tuff och TussPublikationstypSerietidningGrundad1953Nedlagd1958Område SverigeSpråkSvenskaFrekvens1 gång i månaden Tuff och Tuss och deras vänner var en svensk månatlig barnserietidning från Serieförlaget 1953–1958, och tillika den första helt svenska serietidningen. Den övergick delvis i Cirkus med Tuff och Tuss (11 nummer 1959), som däremot innehöll en del importerat material. Tidningen var avsedd som en prestigeprodukt åt förlaget och var till en början fri från annons...

 

Human settlement in EnglandChingford HatchFields in Chingford HatchChingford HatchLocation within Greater LondonLondon boroughWaltham ForestCeremonial countyGreater LondonRegionLondonCountryEnglandSovereign stateUnited KingdomPost townLONDONPostcode districtE4Dialling code020PoliceMetropolitanFireLondonAmbulanceLondon London AssemblyNorth East List of places UK England London 51°37′05″N 0°00′14″E / 51.617977°N 0.003830°E / 51....

 

This article is about an agreement for payment for temporary use. For other uses, see Rent (disambiguation). Rental and Rentals redirect here. For other uses, see Rental (disambiguation). Renter redirects here. For the Estonian economist and chess player, see Raul Renter. Letting redirects here. For other uses, see Let (disambiguation). Payment for temporary use; hiring This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to re...

The Prairies redirects here. For other uses, see Prairie (disambiguation). Region of Western Canada Canadian Prairies Prairies canadiennes (French)EcoregionFarm on the prairies near Hartney, ManitobaMap of the Prairie ProvincesLocationAlberta, Saskatchewan, Manitoba in CanadaArea • Total1,780,650.6 km2 (687,513.0 sq mi)[1]Highest elevation3,747 m (12,293 ft) The Canadian Prairies (usually referred to as simply the Prairies in Canada) is a reg...

 

医学者、写真家の「鳥山晃」とは別人です。 とりやま あきら鳥山 明生誕 (1955-04-05) 1955年4月5日 日本 愛知県西春日井郡清洲町(現:清須市)[1]死没 (2024-03-01) 2024年3月1日(68歳没)職業 漫画家デザイナー称号 芸術文化勲章活動期間 1978年 - 2024年ジャンル 少年漫画代表作 漫画『Dr.スランプ』『ドラゴンボール』デザイン『ドラゴンクエスト』『クロノ・トリガー�...

 

State-operated public school in Gooding, Idaho Idaho School for the Deaf and the Blind sign Headquarters Idaho School for the Deaf and the Blind (ISDB) is a state-operated public school in Gooding, Idaho. It is part of the agency Idaho Educational Services for the Deaf and the Blind (IESDB). It covers grades Pre-Kindergarten to Grade 12.[1] The school covers a 40-acre (160,000 m2) area and provides dormitories for many of its students and has other facilities, such as a gymnasium...

Finish mainly for interior dividing walls and ceilings Lath seen from the back with white plaster coat oozing through Lath and plaster is a building process used to finish mainly interior dividing walls and ceilings. It consists of narrow strips of wood (laths) which are nailed horizontally across the wall studs or ceiling joists and then coated in plaster. The technique derives from an earlier, more primitive process called wattle and daub.[1] Lath and plaster largely fell out of fav...

 

English soldier This article is about the 17th-century English soldier. For the 17th-century Baptist insurrectionary, see Henry Danvers (Baptist). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Henry Danvers, 1st Earl of Danby – news · newspapers · books · scholar · JSTOR (May 2021) (Learn how and when to r...