Sablonfüggvény programtervezési minta

A számítógép-programozásban a sablonfüggvény programtervezési minta vagy röviden sablonfüggvény minta egy olyan viselkedési, tervezési minta, amely egy sablonfüggvény nevű metódus algoritmusával definiálja a program vázát. Ezek némely lépése felüldefiniálható alosztályokban.[1] Lehetővé teszi egyes algoritmusok lépéseinek az újradefiniálását anélkül, hogy az algoritmus struktúrája megváltozna.[2]

Az itt használt sablon kifejezés alatt nem a „C++” -os sablonokat kell érteni.

Bevezetés

Ebben a tervezési mintában a sablonmetódusnak egy vagy több algoritmikus lépése felüldefiniálható az alosztályokban, megengedve eltérő viselkedéseket, miközben a teljes algoritmus lényegében változatlan.[1]

Az objektumorientált programozásban az elsőnek létrehozott osztály biztosítja a tervezési algoritmus alaplépéseit. Ezek a lépéseket az absztrakt metódusok valósítják meg. Később, az alosztályokban az absztrakt metódusokat megváltoztatva jönnek létre a valódi változások.[3] Így az általános algoritmus egy helyen van definiálva, de a konkrét lépések változtathatóak az alosztályokon keresztül.

A sablonfüggvény minta így kezeli a nagyobb szemantika képeit. Ezt a nagyobb képet absztrakt vagy nem absztrakt metódusnak hívják. A nem absztrakt metódusokat teljesen a tervezési minta irányítja, de az absztrakt metódusok az alosztályokban vannak megvalósítva, ezáltal biztosítva a minták erejét és a szabadság mértékét. A tervezési minták absztrakt osztályai szintén meghatározzák a „hook” metódusokat is, melyeket az alosztályokban lehet felül definiálni.[2] Néhány, vagy akár az összes absztrakt metódus specializált lehet egy alosztályban, engedélyezve az írójának bizonyos viselkedéseket minimális módosításokkal a nagyobb szemantikáért. A sablonfüggvény változatlan marad ebben a mintában, biztosítva az alárendelt nem absztrakt és absztrakt metódusok meghívását az eredetileg tervezett szekvenciában.

A sablonfüggvény tervezési minta gyakran előfordul, legalábbis a legegyszerűbb esetben, ahol a metódus csak egyetlenegy absztrakt metódust hív meg egy objektumorientált nyelvben. Ha egy szoftverprogramozó többalakú metódust használ végig, lehet, hogy ez a tervezési minta lesz a természetes velejárója. Ez azért van, mert egy absztrakt vagy többalakú függvény hívása maga az indoka az absztrakt vagy többalakú metódusnak. A sablonfüggvény mintát arra is lehet használni, hogy azonnal plusz értéket adjunk egy szoftvernek.

A sablonfüggvény minta implementációk valósítják meg a védett változók GRASP elvet, mint ahogy az illesztő minta teszi. A különbség annyi, hogy az illesztő minta ugyanazt az interfészt adja néhány operációval, míg a sablonfüggvény minta csak egyet ad egynek.

Struktúra

Sablonmetódus: UML osztálydiagramban
Sablonmetódus LePUS3-ban (legend)

Használata

A sablonfüggvény minta leginkább keretrendszerekben használatos. Álljon itt egy példa a kontroll megfordításával kapcsolatosan.

Érvek a sablonfüggvény minta használata mellett:[3]

  • Lehetővé teszi az alosztályok megvalósítását (metódus felülírással) változó viselkedésekkel.[4]
  • Megóv a kódismétlésektől: Az általános folyamat struktúrát csak egyszer valósítjuk meg az absztrakt osztály(ok) algoritmusában.[4]
  • Azoknál az alosztályoknál irányít, ahol megengedett. Szemben egy egyszerű többalakú felülírással, ahol az alap metódus teljesen újraírt lenne, amely radikális változásokat hozna a folyamatba, itt csak egy speciális részlete változik a folyamatban.[4]

Az irányító struktúra az eredménye az alkalmazásnak a tervezési mintából gyakran említve van „Hollywood” alapelvként. Ezt az alapelvet használva, a sablonfüggvény minta egy szülő osztályban irányítja az egész folyamatot, az alosztályok metódusainak meghívásával, ahol szükséges. Ezt láthatjuk a lentebbi Java kódban:

A sablonfüggvény tervminta hasznos, ha automatikusan generált kóddal kell együttműködni. A nehézség abban áll, hogy ha változik a forrás,akkor változik a generált kód is. Ezt még kézi módosítások is változik. Ezt a sablon tervminta használatával ez megoldható, mivel így elkülöníthetők a generált és a kézileg módosított kódrészek. A sablon osztály lehet absztrakt osztály, vagy lehet interfész.[5]

Példa

/**
 * An abstract class that is common to several games in
 * which players play against the others, but only one is
 * playing at a given time.
 */
 
abstract class Game {
 
    protected int playersCount;
    abstract void initializeGame();
    abstract void makePlay(int player);
    abstract boolean endOfGame();
    abstract void printWinner();
 
    /* A template method : */
    public final void playOneGame(int playersCount) {
        this.playersCount = playersCount;
        initializeGame();
        int j = 0;
        while (!endOfGame()) {
            makePlay(j);
            j = (j + 1) % playersCount;
        }
        printWinner();
    }
}

//Now we can extend this class in order
//to implement actual games:

class Monopoly extends Game {
 
    /* Implementation of necessary concrete methods */
    void initializeGame() {
        // Initialize players
        // Initialize money
    }
    void makePlay(int player) {
        // Process one turn of player
    }
    boolean endOfGame() {
        // Return true if game is over
        // according to Monopoly rules
    }
    void printWinner() {
        // Display who won
    }
    /* Specific declarations for the Monopoly game. */
 
    // ...
}

class Chess extends Game {
 
    /* Implementation of necessary concrete methods */
    void initializeGame() {
        // Initialize players
        // Put the pieces on the board
    }
    void makePlay(int player) {
        // Process a turn for the player
    }
    boolean endOfGame() {
        // Return true if in Checkmate or
        // Stalemate has been reached
    }
    void printWinner() {
        // Display the winning player
    }
    /* Specific declarations for the chess game. */

    // ...
}

Fordítás

Ez a szócikk részben vagy egészben a Template method pattern című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

Jegyzetek

  1. a b Template Method, Design Patterns. Addison-Wesley, 325–330. o. (1994). ISBN 0-201-63361-2 
  2. a b Head First Design Patterns (paperback), O'REILLY, 289, 311. o. (2004). ISBN 978-0-596-00712-6. Hozzáférés ideje: 2012. szeptember 12. 
  3. a b Template Method Design Pattern. Source Making - teaching IT professional. (Hozzáférés: 2012. szeptember 12.) „Template Method is used prominently in frameworks.”
  4. a b c Chung, Carlo. Pro Objective-C Design Patterns for iOS. Berkely, CA: Apress, 266. o. (2011). ISBN 978-1-4302-3331-2 
  5. Pattern Hatching: Design Patterns Applied. Addison-Wesley Professional, 85–101. o. (1998. június 22.). ISBN 978-0201432930 

Read other articles:

Barbara SteeleSteele dalam sebuah foto publisitas tahun 1965Lahir29 Desember 1937 (umur 86)[1]Birkenhead, Cheshire, InggrisKebangsaanInggrisPekerjaanPemeranproduserTahun aktif1958–kiniSuami/istriJames Poe ​ ​(m. 1969; bercerai 1978)​Anak1 Barbara Steele (lahir 29 Desember 1937) adalah seorang pemeran dan produser Britania Raya yang dikenal karena tampil dalam film-film horor Gothik Italia yang meliputi Black Sunday (1960), d...

 

 

Lilian BondLilian Bond, Mei 1931Lahir(1908-01-18)18 Januari 1908[1]London, England, United KingdomMeninggal25 Januari 1991(1991-01-25) (umur 83)Reseda, California, A.S.Tahun aktif1922–1958Suami/istriSidney Smith ​ ​(m. 1935; c. 1944)​ Morton Lowry ​ ​(m. 1950; c. 1956)​ Michael Fessier ​ ​(m. 1961; meninggal 1988)​Anak2 Lilian Bon...

 

 

Bendera anarkisme egois Anarkisme egois adalah sebuah aliran pemikiran anarkis yang berakar dari filsafat Max Stirner, seorang filsuf eksistensialis abad ke-19 yang namanya muncul secara teratur dalam berbagai pembacaan kesejarahan pemikiran anarkisme, sebagai salah satu pemrakarsa anarkisme individualis yang paling awal dan paling terkenal. Max Stirner dan pemikirannya Max Stirner Johann Kaspar Schmidt (25 Oktober 1806 – 26 Juni 1856), lebih dikenal sebagai Max Stirner (nama panggilan yang...

هذه المقالة تحتاج للمزيد من الوصلات للمقالات الأخرى للمساعدة في ترابط مقالات الموسوعة. فضلًا ساعد في تحسين هذه المقالة بإضافة وصلات إلى المقالات المتعلقة بها الموجودة في النص الحالي. (نوفمبر 2018)   لمعانٍ أخرى، طالع مقاطعة كربون (توضيح). مقاطعة كربون    علم   الإح...

 

 

Artikel ini sebatang kara, artinya tidak ada artikel lain yang memiliki pranala balik ke halaman ini.Bantulah menambah pranala ke artikel ini dari artikel yang berhubungan atau coba peralatan pencari pranala.Tag ini diberikan pada Maret 2016. Pemandangan Pulau Tremiti Tremiti (Italia: Isole Tremiti) merupakan sebuah kepulauan di Laut Adriatik, utara Semenanjung Gargano. Pulau ini terletak di Provinsi Foggia dan merupakan bagian dari Taman Nasional Gargano. Pulau ini juga rawan gempa bumi. Pad...

 

 

Ethnic group in Turkey This article is about the Greek communities after the establishment of the Republic of Turkey, in 1923. For the pre-1923 Greek communities, see Ottoman Greeks. See also: History of Anatolia § Classical Antiquity, Byzantine Greeks, Pontic Greeks, Pontic Greeks § Eastern Anatolia Greeks, and Caucasus Greeks Greeks in TurkeyΈλληνες στην ΤουρκίαTürkiye'deki RumlarTotal population3,000–5,000 (0.006% of population)[1][2][3&...

Dwarf galaxy in the constellation Ursa Major NGC 5477Dwarf galaxy NGC 5477 taken by the Hubble Space Telescope.Observation data (J2000 epoch)ConstellationUrsa Major[1]Right ascension14h 05m 33.1s[2]Declination+54° 27′ 40″[2]Redshift0.001057[2]Heliocentric radial velocity317 km/s[2]Distance20 million light years[1]Apparent magnitude (V)14.01[2]CharacteristicsTypeSm:[3]Other designationsMCG+09-23-034...

 

 

Untuk kegunaan lain, lihat Hantu (disambiguasi). Sebuah foto yang konon menampilkan penampakan hantu Ilustrasi hantu bajak laut karya Howard Pyle. Hantu, memedi[1], dedemit[2], atau lelembut[3] adalah roh dari orang atau hewan yang telah mati yang menampakkan wujudnya dalam kehidupan kini. Definisi dari hantu pada umumnya berbeda untuk setiap agama, peradaban, maupun adat istiadat. Dalam banyak kebudayaan, hantu tidak didefinisikan sebagai zat yang baik maupun jahat. S...

 

 

Aftermath EntertainmentStato Stati Uniti Fondazione1996 Fondata daDr. Dre Sede principaleSanta Monica GruppoUniversal Music Group SettoreMusicale ProdottiHip hopGangsta rapWest Coast hip hop Sito webaftermath-entertainment.com/ Modifica dati su Wikidata · Manuale L'Aftermath Entertainment è un'etichetta discografica statunitense, specializzata in musica hip hop e fondata da Dr. Dre nel 1996. Opera come una sussidiaria della Universal Music Group, attraverso la Interscope Records. ...

НаммальварNammalvar величайший среди святых альваров, вдохновитель теологов вишишта-адвайты Имя при рождении Маран Дата рождения 880(0880) Место рождения Альвартерунагари Дата смерти 930(0930) Место смерти Альвартерунагари Подданство Государство Паллавов Род деятельнос�...

 

 

Former subdivision of Poltava Oblast, Ukraine Raion in Poltava Oblast, UkraineDykanka Raion Диканський районRaion FlagCoat of armsCoordinates: 49°49′6.8808″N 34°25′28.0446″E / 49.818578000°N 34.424456833°E / 49.818578000; 34.424456833Country UkraineRegionPoltava OblastEstablished7 March 1923Disestablished18 July 2020Admin. centerDykankaSubdivisions List    — city councils   — settlement councils —...

 

 

  关于与「內閣總理大臣」標題相近或相同的条目页,請見「內閣總理大臣 (消歧義)」。 日本國內閣總理大臣內閣總理大臣紋章現任岸田文雄自2021年10月4日在任尊称總理、總理大臣、首相、阁下官邸總理大臣官邸提名者國會全體議員選出任命者天皇任期四年,無連任限制[註 1]設立法源日本國憲法先前职位太政大臣(太政官)首任伊藤博文设立1885年12月22日,...

MoveOnTanggal pendirian1998; 26 tahun lalu (1998)Jumlah anggota 7 juta[1]Situs webmoveon.org MoveOn (dulunya dikenal sebagai MoveOn.org) adalah sebuah komite aksi politik dan kelompok advokasi kebijakan publik progresif.[2] Dibentuk pada 1998 dalam menanggapi pemakzulan Presiden Bill Clinton oleh DPR, MoveOn.org telah meraih jutaan dolar untuk para kandidat liberal di Amerika Serikat.[2] Referensi ^ Terkel, Amanda; Grim, Ryan (December 5, 2012). MoveOn Moving On: ...

 

 

حزب العمال الثوري العربي البلد العراق  التأسيس تاريخ التأسيس 1966 المؤسسون ياسين الحافظ حزب البعث العربي الاشتراكي   الشخصيات الأمين العام عبد الحافظ حافظ القادة طارق أبو الحسن الأفكار الأيديولوجيا ماركسيةاشتراكية علمية الألوان يسارية انتساب إقليمي التجمع الوطني ال...

 

 

Questa voce sull'argomento politici italiani è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Aldo Loreti Sindaco di Ascoli PicenoDurata mandato6 maggio 1987 –13 novembre 1987 PredecessoreGianni Forlini SuccessoreAmedeo Ciccanti Dati generaliPartito politicoPartito Socialista Democratico Italiano Aldo Loreti (Ascoli Piceno, 25 ottobre 1920 – 4 gennaio 1992) è stato un politico it...

War fought from 1918 to 1919 Hungarian–Romanian WarPart of the revolutions and interventions in HungaryRomanian cavalry in Budapest, August 1919Date13 November 1918 – 3 August 1919 (1918-11-13 – 1919-08-03)(8 months and 3 weeks)LocationTransylvaniaHungaryResult Romanian victoryBelligerents  Kingdom of Hungary (13 November 1918 – 16 November 1918)  Hungarian Republic (16 November 1918 – 21 March 1919)  Soviet Hungary (from 2...

 

 

Ryosuke Sakamoto (阪本 良介code: ja is deprecated , Sakamoto Ryōsuke, lahir 20 Agustus 1959) adalah aktor asal Jepang. Dia mulai berkarier di film lokal sejak tahun 1978, dan dia dikenal dengan peran-perannya dalam serial tokusatsu dan drama: sebagai Detektif Tachibana dalam Tejou wo kakero!, sebagai Susumu Odagiri dalam Tadaima Houkago, dan sebagai Shirou Gou / Red One dalam serial Super Sentai Choudenshi Bioman. Filmografi Drama televisi Ashita no Keiji (TBS, 1977) Tokusou Saizensen (T...

 

 

Mountain range in Central–East Asia For other uses, see Altai. 49°N 89°E / 49°N 89°E / 49; 89 Map of the Altai mountain range The Altai Mountains (/ɑːlˈtaɪ/), also spelled Altay Mountains, are a mountain range in Central Asia and Eastern Asia, where Russia, China, Mongolia, and Kazakhstan converge, and where the rivers Irtysh and Ob have their headwaters. The massif merges with the Sayan Mountains in the northeast, and gradually becomes lower in the southeast...

هذه المقالة بحاجة لمراجعة خبير مختص في مجالها. يرجى من المختصين في مجالها مراجعتها وتطويرها. (يوليو 2016) درافيديةالتوزيعالجغرافي:جنوب آسيا وأجزاء من جنوب شرق آسيا، تحديدا جنوب الهند وسريلانكاتصنيفات اللغوية:إحدى عائلة لغات العالميةدرافيديةاللغة البدائية:بروتو-درافيديةف�...

 

 

ألمانDeutsche (بالألمانية) معلومات عامةنسبة التسمية ألمانيا التعداد الكليالتعداد 160 مليون نسمة.[1][2]مناطق الوجود المميزةالبلد ألمانياالنمساليختنشتاينسويسرا  ألمانيا ‏ 66,000,000 الولايات المتحدة ‏ 55,575,000 [3] البرازيل ‏ 12,000,000 [4] النمسا ‏ 9,000,000...