Состояние (шаблон проектирования)

Состояние
State
Тип поведенческий
Описан в Design Patterns Да

Состояние (англ. State) — поведенческий шаблон проектирования. Используется в тех случаях, когда во время выполнения программы объект должен менять своё поведение в зависимости от своего состояния.

Паттерн состоит из 3 блоков:

Widget — класс, объекты которого должны менять своё поведение в зависимости от состояния.

IState — интерфейс, который должен реализовать каждое из конкретных состояний. Через этот интерфейс объект Widget взаимодействует с состоянием, делегируя ему вызовы методов. Интерфейс должен содержать средства для обратной связи с объектом, поведение которого нужно изменить. Для этого используется событие (паттерн Publisher — Subscriber). Это необходимо для того, чтобы в процессе выполнения программы заменять объект состояния при появлении событий. Возможны случаи, когда сам Widget периодически опрашивает объект состояния на наличие перехода.

StateA … StateZ — классы конкретных состояний. Должны содержать информацию о том, при каких условиях и в какие состояния может переходить объект из текущего состояния. Например, из StateA объект может переходить в состояние StateB и StateC, а из StateB — обратно в StateA и так далее. Объект одного из них должен содержать Widget при создании.

Применение данного паттерна может быть затруднено, если состояния должны обмениваться данными, или одно состояние настраивает свойства другого. В этом случае понадобится глобальный объект, что не очень хорошее архитектурное решение.

Примеры

Пример на C++

Пример на C#

Применение шаблона

Тот же пример, без применения шаблона

Пример на Java

Пример на Python

Пример на Javascript

Пример со сменой состояний из State.

Смена состояний с помощью вызова метода у Widget (из англоязычной версии статьи).

Пример на CoffeeScript

Пример на VB.NET

Применение шаблона

Тот же пример, без применения шаблона

Пример на PHP5


Read other articles:

Badan Pengembangan dan Pembinaan BahasaGedung Pusat Bahasa di Rawamangun, JakartaInformasi lembagaKantor pusatJalan Daksinapati Barat IV, Rawamangun, Jakarta TimurPejabat eksekutifKepala, E. Aminudin AzizDepartemen indukKemendikbud RistekSitus webbadanbahasa.kemdikbud.go.id Badan Pengembangan dan Pembinaan Bahasa (sempat dikenal dengan nama Pusat Bahasa dan Badan Pengembangan Bahasa dan Perbukuan) adalah unsur penunjang di Kementerian Pendidikan dan Kebudayaan Republik Indonesia yang mempunya...

 

Boy G. SaktiLahirYandi Yasin4 Agustus 1966 (umur 57)Batusangkar, Sumatera BaratKebangsaanIndonesiaAlmamaterInstitut Kesenian JakartaPekerjaanKoreograferOrang tuaGusmiati Suid Yandi Yasin atau yang lebih dikenal dengan Boy G. Sakti (lahir 4 Agustus 1966) adalah salah seorang koreografer Indonesia. Boy mulai belajar menari sejak umur 17 tahun di Gumarang Sakti Dance Company, di bawah bimbingan ibunya, Gusmiati Suid. Disamping itu ia juga belajar secara formal di Institut Kesenian Jakarta ...

 

Museum 4 Juni六四紀念館Galeri sejarahDidirikan26 April 2014 (2014-04-26)LokasiNo. 10, Ngai Wong Commercial Building, 11–13 Mong Kok Rd, Mong Kok, Kowloon, Hong KongJenisPrivatePendiriAliansi Hong Kong dalam Mendukung Gerakan Demokrat Patriotik Tiongkok Museum 4 Juni Hanzi tradisional: 六四紀念館 Hanzi sederhana: 六四纪念馆 Alih aksara Mandarin - Hanyu Pinyin: Liù Sì Jìniànguǎn Yue (Kantonis) - Romanisasi Yale: Luhk sei géi nihm gún - Jyutping: Luk6 sei3 gei2 nim6 ...

Rhys IfansRhys Ifans, 2011LahirRhys Owain Evans22 Juli 1967 (umur 56)[1][2]Haverfordwest, Pembrokeshire, WalesPekerjaanAktor, Produser, MusisiTahun aktif1990–sekarang Rhys Ifans (r̥ɨːs ˈivans; Rhys Owain Evans;[3] lahir 22 Juni 1967)[3][4][5][6] adalah aktor, produser, dan musisi Welsh. Dia dikenal karena penggambaran karakter seperti Spike di Notting Hill, Jed Parry di Enduring Love, Bola mata Paul masuk Kevin & Per...

 

American sailor Michael SchoettlePersonal informationFull nameMichael Beaver SchoettleBornSeptember 7, 1936 (1936-09-07) (age 87)Sailing careerCollege team Yale University Medal record Men's sailing Representing the  United States Olympic Games 1952 Helsinki 5.5 metre Michael Beaver Schoettle (born September 7, 1936) is an American sailor and Olympic Champion. He competed at the 1952 Summer Olympics in Helsinki and earned a gold medal as crew in the 5.5 metre class on...

 

Questa voce sull'argomento stagioni delle società calcistiche italiane è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Alma Juventus Fano 1906. Società Polisportiva del Littorio Alma Juventus FanoStagione 1938-1939Sport calcio Squadra Fano Allenatore Italo Breviglieri Presidente Aldo Paolini Serie C6º posto nel girone eliminatorio F. 1937-1938 1939-1940 Si invita a seguire il m...

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

 

American sports cable television channel Television channel Universal SportsCountryUnited StatesBroadcast areaNationwideHeadquartersWoodland Hills, CaliforniaProgrammingLanguage(s)EnglishPicture format480i (SDTV)OwnershipOwner InterMedia Partners (92%) NBC Sports Group (8%) HistoryLaunched2006; 18 years ago (2006)ClosedNovember 16, 2015; 8 years ago (2015-11-16)Replaced byOlympic Channel (2017; Universal HD carried existing contracts between 2015–2017)For...

 

Railway station in Sydney, New South Wales, Australia Kings CrossStation entrance, August 2017General informationLocationDarlinghurst Road, Kings CrossCoordinates33°52′29″S 151°13′21″E / 33.87468°S 151.22242°E / -33.87468; 151.22242Owned byTransport Asset Holding EntityOperated bySydney TrainsLine(s)Eastern SuburbsDistance3.41 kilometres from CentralPlatforms2 (1 island)Tracks2ConnectionsBusConstructionStructure typeUndergroundAccessibleYesOther information...

Pour les articles homonymes, voir Schinkel. Si ce bandeau n'est plus pertinent, retirez-le. Cliquez ici pour en savoir plus. Cet article ne cite pas suffisamment ses sources (août 2021). Si vous disposez d'ouvrages ou d'articles de référence ou si vous connaissez des sites web de qualité traitant du thème abordé ici, merci de compléter l'article en donnant les références utiles à sa vérifiabilité et en les liant à la section « Notes et références ». En pratique...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

 

この項目には、一部のコンピュータや閲覧ソフトで表示できない文字が含まれています(詳細)。 数字の大字(だいじ)は、漢数字の一種。通常用いる単純な字形の漢数字(小字)の代わりに同じ音の別の漢字を用いるものである。 概要 壱万円日本銀行券(「壱」が大字) 弐千円日本銀行券(「弐」が大字) 漢数字には「一」「二」「三」と続く小字と、「壱」「�...

Державний комітет телебачення і радіомовлення України (Держкомтелерадіо) Приміщення комітетуЗагальна інформаціяКраїна  УкраїнаДата створення 2003Керівне відомство Кабінет Міністрів УкраїниРічний бюджет 1 964 898 500 ₴[1]Голова Олег НаливайкоПідвідомчі ор...

 

Wife of the British Prime Minister The Right HonourableThe Countess of LiverpoolLady Louisa in 1793BornLouisa Theodosia Hervey(1767-02-00)February 1767Ickworth, Suffolk, EnglandDied12 June 1821(1821-06-12) (aged 54)London, EnglandKnown forSpouse of the prime minister of the United Kingdom (1812–1821)Spouse Robert Jenkinson, 2nd Earl of Liverpool ​ ​(m. 1795)​ParentsFrederick Hervey, 4th Earl of Bristol (father)Elizabeth Davers, Countess of Brist...

 

Daughter of U.S. president John Adams This article is about the daughter of U.S. president John Adams. For his wife (and this article's subject's mother), see Abigail Adams. Abigail Adams SmithBornAbigail Adams(1765-07-14)July 14, 1765Braintree, Province of Massachusetts Bay, British AmericaDiedAugust 15, 1813(1813-08-15) (aged 48)Quincy, Massachusetts, U.S.Burial placeHancock Cemetery in Quincy, MassachusettsSpouse William Stephens Smith ​ ​(m. 1786)​C...

G.H.A. Hansen, discoverer of M. leprae in 1873 The history of leprosy was traced to its origins by an international team of 22 geneticists using comparative genomics of the worldwide distribution of Mycobacterium leprae.[1] Monot et al. (2005) determined that leprosy originated in East Africa or the Near East and traveled with humans along their migration routes, including those of trade in goods and slaves. The four strains of M. leprae are based in specific geographi...

 

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

 

Ó RothláinRowlan, Rowland, Rowlands, Rollan, Rollin, Rolan and RowleyMap of Connacht, c. 10th centuryParent familyUí FiachrachPlace of originConnacht, IrelandTitlesChieftains of the Principality of CoolcarneyO'Rothlain reference on page 129 of The Irish AnnalsImage of page 114 from the book Irish Names and Surnames by Rev Patrick Woulfe (published 1922) Ó Rothláin (/oʊ ˈroʊlɔːn/ oh-ROH-lawn) is an Irish surname. The name is a Patronym meaning descendant of Rothlán. It is suggested ...

Swedish ice hockey clubAlmtuna ISCityUppsala, SwedenLeagueHockeyAllsvenskanFounded1932 (Hockey in 1947)Home arenaUpplands Bilforum ArenaColors     General managerTony MårtenssonHead coachRobert KimbyWebsitealmtuna.com Almtuna IS is a Swedish ice hockey club based in Uppsala and is currently playing in HockeyAllsvenskan, the second highest league of ice hockey in Sweden. The team maintained its place in the Allsvenskan despite suffering relegation in the 2018–19 season f...

 

Type of autoantibody Immunofluorescence staining pattern of anti-centromere antibodies on HEp-20-10 cells Anti-centromere antibodies (ACAs; often styled solid, anticentromere) are autoantibodies specific to centromere and kinetochore function. They occur in some autoimmune diseases, frequently in limited systemic scleroderma (formerly called CREST syndrome), and occasionally in the diffuse form of scleroderma. They are rare in other rheumatic diseases and in healthy persons. Anti-centromere a...