Компонувальник (шаблон проєктування)

Компонувальник, Composite — структурний шаблон який об'єднує об'єкти в ієрархічну деревоподібну структуру, і дозволяє уніфіковане звертання для кожного елемента дерева.

Призначення

Дозволяє користувачам будувати складні структури з простіших компонентів. Проєктувальник може згрупувати дрібні компоненти для формування більших, які, в свою чергу, можуть стати основою для створення ще більших.

Структура


Ключем до паттерну компонувальник є абстрактний клас, який є одночасно і примітивом, і контейнером(Component). У ньому оголошені методи, специфічні для кожного виду об'єкта (такі як Operation) і загальні для всіх складових об'єктів, наприклад операції для доступу і управління нащадками. Підкласи Leaf визначає примітивні об'єкти, які не є контейнерами. У них операція Operation реалізована відповідно до їх специфічних потреб. Оскільки у примітивних об'єктів немає нащадків, то жоден з цих підкласів не реалізує операції, пов'язані з управління нащадками (Add, Remove, GetChild). Клас Composite складається з інших примітивніших об'єктів Component. Реалізована в ньому операція Operation викликає однойменну функцію відтворення для кожного нащадка, а операції для роботи з нащадками вже не порожні. Оскільки інтерфейс класу Composite відповідає інтерфейсу Component, то до складу об'єкта Composite можуть входити і інші такі ж об'єкти.

Учасники

  • Component (Component)

Оголошує інтерфейс для компонованих об'єктів; Надає відповідну реалізацію операцій за замовчуванням, загальну для всіх класів; Оголошує єдиний інтерфейс для доступу до нащадків та управління ними; Визначає інтерфейс для доступу до батька компонента в рекурсивної структурі і при необхідності реалізує його (можливість необов'язкова);

  • Leaf (Leaf_1, Leaf_2) — лист.

Об'єкт того ж типу що і Composite, але без реалізації контейнерних функцій; Представляє листові вузли композиції і не має нащадків; Визначає поведінку примітивних об'єктів в композиції; Входить до складу контейнерних об'єктів;

  • Composite (Composite) — складений об'єкт.

Визначає поведінку контейнерних об'єктів, у яких є нащадки; Зберігає ієрархію компонентів-нащадків; Реалізує пов'язані з управління нащадками (контейнерні) операції в інтерфейсі класу Component;

Переваги

  • Клієнти використовують інтерфейс класу компонентів для взаємодії з об'єктами у складній структурі.
  • Якщо виклик здійснюється в листок, запит обробляється безпосередньо.
  • Якщо виклик до Composite, він пересилає запит до своїх дочірніх компонентів.

Вади

  • Як тільки деревоподібна структура визначена, композитний дизайн робить дерево надто загальним.
  • У конкретних випадках важко обмежити компоненти дерева лише окремими типами.
  • Для забезпечення обмеження програма повинна спиратися на перевірки виконання часу, оскільки вона не може використовувати систему типу мови програмування.

Приклад реалізації

C++

C#

Джерела

Read other articles:

Elizabeth McCardle Johnson Elizabeth McCardle Johnson (4 Oktober 1810 – 15 Januari 1876) merupakan Ibu Negara Amerika Serikat ke-22 dan merupakan istri dari Andrew Johnson, presiden Amerika Serikat ke-17. Andrew Johnson mengatakan istrinya banyak berjasa dalam mengajarinya membaca dan menulis tanpa mengenyam pendidikan formal. McCardle sangat mendukung karier politik suaminya. Johnson menikahi istrinya pada 5 Mei 1827 ketika ia berumur 18 tahun dan Eliza berumur 16 tahun. Pran...

 

Artikel ini tidak memiliki referensi atau sumber tepercaya sehingga isinya tidak bisa dipastikan. Tolong bantu perbaiki artikel ini dengan menambahkan referensi yang layak. Tulisan tanpa sumber dapat dipertanyakan dan dihapus sewaktu-waktu.Cari sumber: Ghazni – berita · surat kabar · buku · cendekiawan · JSTOR Menara Ghazni, dibangun oleh Bahram Shah Kota Ghazni (bahasa Persia: غزنی - Ğaznī) terletak di timur Afghanistan dengan 141,000 orang pend...

 

Graphic components of typeface letters Typographic parts of a glyph: 1) x-height; 2) ascender line; 3) apex; 4) baseline; 5) ascender; 6) crossbar; 7) stem; 8) serif; 9) leg; 10) bowl; 11) counter; 12) collar/link/neck; 13) loop; 14) ear; 15) tie; 16) horizontal bar; 17) arm; 18) vertical bar; 19) cap height; 20) descender height. Anatomy of a Devangari typeface Typeface anatomy describes the graphic elements that make up letters in a typeface.[1][2] Typefaces are born from th...

Yum cha Jam yum cha di Balai Kota Hong Kong Hanzi tradisional: 飲茶 Hanzi sederhana: 饮茶 Makna harfiah: minum teh Alih aksara Mandarin - Hanyu Pinyin: yǐn chá Kejia (Hakka) - Romanisasi: yim tsa Min Nan - Romanisasi POJ: ím-tê Yue (Kantonis) - Romanisasi Yale: yám chà - Jyutping: jam2 caa4 Lung Mun, sebuah restoran gaya lama di Wan Chai, Hong Kong, yang telah ditutup dan dihancurkan. Yum cha (Hanzi sederhana: 饮茶; Hanzi tradisional: 飲茶; Pinyin: yǐn chá[1&#...

 

† Человек прямоходящий Научная классификация Домен:ЭукариотыЦарство:ЖивотныеПодцарство:ЭуметазоиБез ранга:Двусторонне-симметричныеБез ранга:ВторичноротыеТип:ХордовыеПодтип:ПозвоночныеИнфратип:ЧелюстноротыеНадкласс:ЧетвероногиеКлада:АмниотыКлада:Синапсиды�...

 

Warner Bros. theatrical cartoon character Fudd redirects here. For other uses, see Fudd (disambiguation). Fictional character Elmer J. FuddLooney Tunes/Merrie Melodies characterFirst appearanceLittle Red Walking Hood (November 6, 1937; 86 years ago (1937-11-06)) (prototype version)[1][2]Elmer's Candid Camera (March 2, 1940; 84 years ago (1940-03-02)) (official/finalized version)Created byTex AveryChuck JonesVoiced byMel Blanc (1937–1939-19...

Soviet heavy tank For other uses, see T10 (disambiguation). T-10 Heavy Tank T-10M at the National Museum of the History of Ukraine in the Second World War, KyivTypeHeavy tankPlace of originSoviet UnionService historyIn service1954–1996 (sources vary)Used bySoviet UnionRussiaSouth OssetiaWarsCold War Invasion of CzechoslovakiaProduction historyDesignerJozef KotinDesigned1949–53ManufacturerFactory 185, Factory 174Produced1954–66No. built1,439SpecificationsMass52 t...

 

19th and 20th-century revival of Albanian culture Rilindja redirects here. For the newspaper, see Rilindja (newspaper). Part of a series on the History of Albania Early History Origin of the Albanians Illyria Illyrians Macedonia Illyricum Medieval Byzantine rule Bulgarian rule Principality of Arbanon Angevin Kingdom of Albania Principality of Albania Serbian rule Principalities League of Lezhë Venetian Albania Early modern Principality of Mirdita Ottoman Albania Islamization of Albania Sanja...

 

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

Сельское поселение России (МО 2-го уровня)Новотитаровское сельское поселение Флаг[d] Герб 45°14′09″ с. ш. 38°58′16″ в. д.HGЯO Страна  Россия Субъект РФ Краснодарский край Район Динской Включает 4 населённых пункта Адм. центр Новотитаровская Глава сельского пос�...

 

Campionati italiani femminili assoluti di atletica leggera 1941 Competizione Campionati italiani assoluti Sport Atletica leggera Edizione XIX Organizzatore FIDAL Date 13 luglio3 agosto (staffette) Luogo ModenaPiacenza (staffette) Discipline 10 Impianto/i Stadio Cesare MarzariStadio del Littorio Cronologia della competizione 1940(uomini, donne) 1942(uomini, donne) Manuale I XIX campionati italiani femminili assoluti di atletica leggera si sono tenuti presso lo stadio Cesare Marzari di Modena ...

 

Навчально-науковий інститут інноваційних освітніх технологій Західноукраїнського національного університету Герб навчально-наукового інституту інноваційних освітніх технологій ЗУНУ Скорочена назва ННІІОТ ЗУНУ Основні дані Засновано 2013 Заклад Західноукраїнський �...

Садиба Штамма 50°33′27″ пн. ш. 30°11′09″ сх. д. / 50.55766666669444476° пн. ш. 30.185927777805556360° сх. д. / 50.55766666669444476; 30.185927777805556360Координати: 50°33′27″ пн. ш. 30°11′09″ сх. д. / 50.55766666669444476° пн. ш. 30.185927777805556360° сх. д. / 50.55766666669444476; 30.18592777780...

 

Palestinian wire service Ma'an News Agency (MNA)Founded2005FounderRaed OthmanHeadquartersPalestinian territoriesWebsitewww.maannews.net Ma'an News Agency (MNA; Arabic: وكالة معا الإخبارية) is a large wire service created in 2005 in the Palestinian territories.[1][2] It is part of the Ma'an Network, a non-governmental organization media network created in 2002[1] in the Palestinian territories among independent journalists throughout the West Bank and G...

 

Aglibol, Baalshamin (tengah), dan Malakbel (abad pertama Masehi; ditemukan di dekat Tadmur, Suriah) Baalshamin atau Ba'al Šamem[1] (Aramaik: ܒܥܠ ܫܡܝܢ), harfiah: 'Tuan Langit', adalah dewa Semit barat laut, gelar sebagai yang dipertuan di langit juga dikenakan kepada dewa-dewa lain yang disebutkan dalam prasasti Timur Tengah kuno, khususnya di Kanaan/Funisia dan Suriah. Gelar ini sering diberikan kepada Hadad, yang juga sering kali hanya disebut sabagai Ba‘al (tuan). Baalsham...

Makin Lama Makin AsyikPoster filmSutradaraA. RachmanProduserRam SorayaDitulis olehA. RachmanPemeranWarkop DKI (Dono, Kasino, Indro)Susy BolleMeriam BellinaTimbul SuhardiBaron AchmadiUdin LabuLeo SlametPaul PoliiSri Suparni CDistributorSoraya Intercine FilmsTanggal rilis28 Mei 1987Durasi106 menitNegaraIndonesia Makin Lama Makin Asyik adalah film drama komedi Indonesia yang dirilis dan diproduksi pada tanggal 28 Mei 1987 dan disutradarai oleh A. Rachman serta dibintangi antara lain oleh Warkop ...

 

Area on the junction between the Somali and Antarctic Plates Approximate surface projection on Indian Ocean of Prince Edward Fracture Zone (violet). Also shown are nearby fracture zones (orange) and associated features of fracture zones (lighter orange), as are mid-oceanic ridges (white). Click to expand map and obtain interactive details.[1] The Prince Edward Fracture Zone is located near the centre of the Southwest Indian Ridge. The Prince Edward Fracture Zone (PEFZ) is one of the f...

 

Voce principale: 1. Fußball-Club Nürnberg Verein für Leibesübungen. 1. Fußball-Club Nürnberg Verein für LeibesübungenStagione 2002-2003Sport calcio Squadra Norimberga Allenatore Klaus Augenthaler (1ª-30ª) Wolfgang Wolf (31ª-34ª) All. in seconda Dieter Lieberwirth Bundesliga17º posto Coppa di GermaniaOttavi di finale Maggiori presenzeCampionato: Kampa (34)Totale: Müller, Kampa (36) Miglior marcatoreCampionato: Ćirić (12)Totale: Ćirić (16) StadioFrankenstadion Maggior nu...

عبد الله أبو زمع معلومات شخصية الاسم الكامل عبد الله محمد أبو زمع الميلاد 4 أبريل 1976 (العمر 48 سنة)عمان، الأردن الطول 1.81 م (5 قدم 11 1⁄2 بوصة) مركز اللعب وسط هجومي الجنسية الأردن  معلومات النادي النادي الحالي الأنصار (مدرب) مسيرة الشباب سنوات فريق الوحدات المسيرة ...

 

У этого термина существуют и другие значения, см. Эйвон. Бывшее графство Эйвон на карте Англии Э́йвон (англ. Avon) — бывшее неметропольное графство в юго-западной части Англии, существовавшее с 1974 по 1996 год. Площадь территории графства в 1974 году составляла 1346 км², в 199...