Mẫu hợp tử

Trong công nghệ phần mềm, mẫu hợp tử (Tiếng Anh: Composite pattern) là một mẫu thiết kế phân vùng. Mẫu hợp tử mô tả một nhóm các đối tượng được đối xử giống như với một thực thể đơn lẻ của cùng loại đối tượng đó. Mục đích của một hợp tử là để "tổng hợp" các đối tượng thành các cấu trúc cây để diễn tả hệ thứ bậc từng phần. Việc thực hiện mẫu hợp tử sẽ cho phép các "khách" đối xử với các đối tượng và hợp tử riêng lẻ một cách đồng nhất.[1]

Mục đích

Trong lập trình hướng đối tượng, một đối tượng hợp tử được tạo thành từ một hay nhiều đối tượng tương tự nhau (hoặc có một số chức năng tương tự nhau). Ý tưởng ở đây là có thể thao tác trên một nhóm đối tượng theo cách như thao tác trên một đối tượng duy nhất. Các đối tượng của nhóm phải có các thao tác chung, hay còn gọi là mẫu số chung nhỏ nhất.

Sử dụng khi nào

Khi sử dụng nhiều đối tượng theo cùng một cách, chúng thường có cùng mã lệnh. Ví dụ, khi sự khác nhau duy nhất giữa hai hàm chỉ là thao tác trên một đối tượng kiểu Hình vuông hoặc Hình tròn. Mẫu thiết kế này sẽ rất hữu ích khi sự khác nhau không cần phải tồn tại, Nó sẽ đơn giản hơn khi xét tập các đối tượng đồng nhất.

Cấu trúc

  • Component (thành phần)
    • khai báo giao diện cho thành phần đối tượng
    • thực thi thao tác mặc định
    • khai báo một giao diện cho phép truy cập đến các thành phần con
  • Leaf (Lá)
    • biểu diễn các đối tượng lá trong thành phần đối tượng
  • Composite (Hợp tử)
    • định nghĩa một thao tác cho các thành phần có thành phần con
    • lưu trữ thành phần con
    • thực thi sự quản lý các thành phần con của giao diện Component
  • Client (khách)
    • thao tác các đối tượng dựa trên giao diện Composite

Ví dụ

Java

Ví dụ sau minh hoạ ví dụ nêu ở trên với kết quả là:

(Europe:  (England: London)   (France: Paris))
import java.util.*;

interface Component {
   public String defaultMethod();
   public ArrayList<Component> getChildren();
   public boolean addComponent(Component c);
   public boolean removeComponent(Component c);
}

class Composite implements Component {
   private String id;
   private ArrayList<Component> components = new ArrayList<Component>();

   public Composite(String identification)         { id = identification; }

   public String defaultMethod() { 
       String s = " (" + id + ":"; 
       for (Component child: getChildren())
           s += " " + child.defaultMethod();
       return s + ") ";
   }

   public ArrayList<Component> getChildren()       { return components; }
   public boolean addComponent(Component c)        { return components.add(c); }
   public boolean removeComponent(Component c)     { return components.remove(c); }
}
   
class Leaf implements Component {
   private String id;

   public Leaf(String identification)              { id = identification; }

   public String defaultMethod()                   { return id; }
   public ArrayList<Component> getChildren()       { return null; }
   public boolean addComponent(Component c)        { return false; }
   public boolean removeComponent(Component c)     { return false; }
}

class CompositePattern {
   public static void main(String[] args) {
       Composite england = new Composite("England");
       Leaf york = new Leaf("York");
       Leaf london = new Leaf("London");
       england.addComponent(york);
       england.addComponent(london);
       england.removeComponent(york);

       Composite france = new Composite("France");
       france.addComponent(new Leaf("Paris"));

       Composite europe = new Composite("Europe");
       europe.addComponent(england);
       europe.addComponent(france);
        
       System.out.println(europe.defaultMethod());  
   }
}

Tham khảo

  1. ^ Gamma, Erich; Richard Helm; Ralph Johnson; John M. Vlissides (1995). Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley. tr. 395. ISBN 0-201-63361-2.

Read other articles:

  فيلق الشرطة الوطنية (إسبانيا) فيلق الشرطة الوطنية (إسبانيا) فيلق الشرطة الوطنية (إسبانيا)ختم تفاصيل الوكالة الحكومية البلد إسبانيا  تأسست 13 يناير 1824  الإدارة موقع الويب الموقع الرسمي،  والموقع الرسمي  تعديل مصدري - تعديل   فيلق الشرطة الوطنية (بالإسبانية: Cue...

 

Disambiguazione – Se stai cercando altri significati, vedi Serie A 1940-1941 (disambigua). Serie A 1940-1941 Competizione Serie A Sport Calcio Edizione 41ª (12ª di Serie A) Organizzatore Direttorio Divisioni Superiori Date dal 6 ottobre 1940al 4 maggio 1941 Luogo  Italia Partecipanti 16 Formula girone unico Risultati Vincitore Bologna(6º titolo) Retrocessioni NovaraBari Statistiche Miglior marcatore Héctor Puricelli (22) Incontri disputati 240 Gol segnati 733 (3,...

 

Artikel ini bukan mengenai kota di Malaysia, Kuantan. Kabupaten Kuantan SingingiKabupatenTranskripsi bahasa daerah • Abjad Jawiكوانتن سيڠيڠيKantor Bupati Kuantan Singingi LambangJulukan: Kota JalurMotto: Basatu nogori maju(Kuantan) Bersatu untuk memajukan negeriPetaKabupaten Kuantan SingingiPetaTampilkan peta SumatraKabupaten Kuantan SingingiKabupaten Kuantan Singingi (Indonesia)Tampilkan peta IndonesiaKoordinat: 0°28′31″S 101°27′31″E /...

العلاقات المغربية البلجيكية المغرب بلجيكا   المغرب   بلجيكا تعديل مصدري - تعديل   العلاقات المغربية البلجيكية هي العلاقات الثنائية التي تجمع بين المغرب وبلجيكا.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: وجه المقارنة ا�...

 

Latin Catholic jurisdiction in Italy Diocese of San Marco Argentano-ScaleaDioecesis Sancti Marci Argentanensis-ScaleensisCathedral in San Marco ArgentanoLocationCountryItalyEcclesiastical provinceCosenza-BisignanoStatisticsArea1,148 km2 (443 sq mi)Population- Total- Catholics(as of 2020)116,900 (est.)113,715 (97.4%%)Parishes65InformationDenominationCatholic ChurchSui iuris churchLatin ChurchRiteRoman RiteEstablished1179CathedralCathedral of St. NicholasPatron sai...

 

Cet article est une ébauche concernant une compagnie aérienne et l’Allemagne. Vous pouvez partager vos connaissances en l’améliorant (comment ?). Les entreprises étant sujet à controverse, n’oubliez pas d’indiquer dans l’article les critères qui le rendent admissible. Interflug Codes IATAOACIIndicatif d'appel IF IFL Interflug Repères historiques Date de création 1958 Date de disparition 1991 Généralités Basée à Aéroport Berlin-Schönefeld Taille de la flotte >...

British campaign in the CaribbeanPart of the Napoleonic warsDate20 June – 25 September 1803LocationCaribbeanResult British victoryBelligerents United Kingdom France Batavian RepublicCommanders and leaders William Grinfield Samuel Hood Antoine Noguès César Berthier Antony MeertensUnits involved Expeditionary force Colonial garrisonsStrength 3,14914 ships 800 (France)1,500 (Batavia)Casualties and losses 20 killed118 wounded8 missing700 dead from disease 800 captured1,500 joined British serv...

 

Airport in Newfoundland and Labrador, Canada Exploits Valley (Botwood) AirportIATA: noneICAO: noneTC LID: CCP2SummaryAirport typePublicOperatorGovernment of Newfoundland and LabradorLocationBotwood, Newfoundland and LabradorTime zoneNST (UTC−03:30) • Summer (DST)NDT (UTC−02:30)Elevation AMSL328 ft / 100 mCoordinates49°03′22″N 055°26′52″W / 49.05611°N 55.44778°W / 49.05611; -55.44778MapCCP2Location in Newfoundland and LabradorR...

 

Éphémérides Plan de l'hôtel de Philippe de Rigaud (Château de Vaudreuil)Chronologie du Canada 1723 1724 1725  1726  1727 1728 1729Décennies au Canada :1690 1700 1710  1720  1730 1740 1750 Chronologie dans le monde 1723 1724 1725  1726  1727 1728 1729Décennies :1690 1700 1710  1720  1730 1740 1750Siècles :XVIe XVIIe  XVIIIe  XIXe XXeMillénaires :-Ier Ier  IIe  IIIe Chronologies thématiques Art Architectu...

For the hit single of 1958 by Buddy Holly & the Crickets, see Maybe Baby (song). For the film of 1988 released internationally as Maybe Baby, see For Keeps (film). 2000 British filmMaybe BabyTheatrical release posterDirected byBen EltonWritten byBen EltonProduced byPhil McIntyreStarringHugh LaurieJoely RichardsonAdrian LesterJames PurefoyTom HollanderJoanna LumleyRowan AtkinsonEmma ThompsonDawn FrenchCinematographyRoger LanserEdited byPeter HollywoodMusic byColin TownsProductioncompaniesP...

 

Questa voce o sezione sull'argomento fiction televisive statunitensi non cita le fonti necessarie o quelle presenti sono insufficienti. Puoi migliorare questa voce aggiungendo citazioni da fonti attendibili secondo le linee guida sull'uso delle fonti. Segui i suggerimenti del progetto di riferimento. Processo all'incredibile HulkDavid Banner nella prova d'interrogatorioTitolo originaleThe Trial of the Incredible Hulk PaeseStati Uniti d'America Anno1989 Formatofilm TV Genereazione, s...

 

Mean position of all the points in a shape This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (April 2013) (Learn how and when to remove this message) Centroid of a triangle In mathematics and physics, the centroid, also known as geometric center or center of figure, of a plane figure or solid figure is the arithmetic mean position of all the points in the surfac...

JâlonscomuneJâlons – Veduta LocalizzazioneStato Francia RegioneGrand Est Dipartimento Marna ArrondissementChâlons-en-Champagne CantoneChâlons-en-Champagne-2 TerritorioCoordinate49°00′N 4°11′E / 49°N 4.183333°E49; 4.183333 (Jâlons)Coordinate: 49°00′N 4°11′E / 49°N 4.183333°E49; 4.183333 (Jâlons) Superficie10,44 km² Abitanti591[1] (2009) Densità56,61 ab./km² Altre informazioniCod. postale51150 Fuso orarioUTC+1...

 

Valley on Mars Frento VallisFrento Vallis, as seen by HiRISE. Click on image to see better view of Dust Devil Tracks.Coordinates50°18′S 14°30′W / 50.3°S 14.5°W / -50.3; -14.5 Frento Vallis is a valley in the Noachis quadrangle of Mars, with a location centered at 50.3 S and 14.5 W. It is 277 km long and was named after the classical name for a river in Italy.[1][2] References ^ Gazetteer of Planetary Nomenclature. Astrogeology Research Prog...

 

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

لله لوي تراب تقسيم إداري البلد إيران  إحداثيات 37°44′37″N 45°09′23″E / 37.74361111°N 45.15638889°E / 37.74361111; 45.15638889   تعديل مصدري - تعديل   لله‌ لوي تراب هي قرية في مقاطعة أرومية، إيران. عدد سكان هذه القرية هو 295 في سنة 2006.[1] مراجع ^ تعداد سكان جمهورية إيران الإسلامية، 138...

 

Cruiser of the Royal Navy Dunvegan Castle in civilian service History United Kingdom NameDunvegan Castle NamesakeDunvegan Castle OwnerUnion-Castle Mail SS Co Ltd Operator Union-Castle Line (1936–39) Royal Navy (1939–40) Port of registryLondon RouteTilbury – South Africa (1936–39) BuilderHarland and Wolff Yard number960 Launched26 March 1936 Completed18 August 1936 Maiden voyage18 September 1936 In service1936 Out of service1940 Identification UK official number 164702 Call sign GYXG F...

 

Town in Indiana, United StatesTown of Lizton, IndianaTownDowntown LiztonNickname: The only Lizton in the worldLocation of Lizton in Hendricks County, Indiana.Coordinates: 39°52′45″N 86°32′25″W / 39.87917°N 86.54028°W / 39.87917; -86.54028CountryUnited StatesStateIndianaCountyHendricksTownshipUnionEstablished1851Area[1] • Total0.66 sq mi (1.72 km2) • Land0.66 sq mi (1.72 km2) • W...

English footballer (born 1973) David Unsworth Unsworth as Everton caretaker manager in 2017Personal informationFull name David Gerald Unsworth[1]Date of birth (1973-10-16) 16 October 1973 (age 50)[2]Place of birth Chorley, EnglandHeight 6 ft 1 in (1.85 m)[2]Position(s) Centre-back, left-backYouth career0000–1992 EvertonSenior career*Years Team Apps (Gls)1992–1997 Everton 116 (11)1997–1998 West Ham United 32 (2)1998 Aston Villa 0 (0)1998–2004...

 

Este artigo não cita fontes confiáveis. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Novembro de 2020) Caribbean Airlines Caribbean Airlines IATA BW ICAO BWA Indicativo de chamada Caribbean Airlines Fundada em 2006 Principais centrosde operações Aeroporto Internacional de Piarco Outros centrosde operações Aeroporto Internacional Grantley Ad...