Osavaltio | |
---|---|
Osavaltio | |
Tyyppi | käyttäytymiseen |
Kuvattu suunnittelukuvioissa | Joo |
State ( Eng. State ) on käyttäytymismalli . Sitä käytetään niissä tapauksissa, kun ohjelman suorituksen aikana objektin täytyy muuttaa käyttäytymistään tilastaan riippuen.
Malli koostuu 3 lohkosta:
Widget on luokka , jonka objektien pitäisi muuttaa käyttäytymistään tilasta riippuen.
IState on rajapinta , joka jokaisen konkreettisen tilan on toteutettava. Tämän käyttöliittymän kautta Widget-objekti on vuorovaikutuksessa tilan kanssa delegoimalla sille menetelmäkutsuja. Käyttöliittymän tulee sisältää välineet palautetta varten objektille, jonka käyttäytymistä halutaan muuttaa. Tätä varten käytetään tapahtumaa ( kuvio Publisher - Subscriber ). Tämä on tarpeen tila-objektin korvaamiseksi ohjelman suorituksen aikana tapahtumien tapahtuessa. Joskus widget itse saattaa ajoittain kysyä tilaobjektilta siirtymää.
StateA ... StateZ - konkreettisten tilojen luokat. Sen tulee sisältää tietoa siitä, missä olosuhteissa ja missä tilassa kohde voi siirtyä nykyisestä tilasta. Esimerkiksi objekti voi siirtyä tilasta A tilasta tilaanB ja tilaan C ja tilasta B takaisin tilaan A ja niin edelleen. Yhden niistä objektin on sisällettävä widget, kun se luodaan.
Tämän mallin soveltaminen voi olla vaikeaa, jos tilojen on kommunikoitava tai jos yksi tila asettaa toisen ominaisuudet. Tässä tapauksessa tarvitset globaalin kohteen, mikä ei ole kovin hyvä arkkitehtoninen ratkaisu.
Mallin käyttäminen
Lähdeteksti C# käyttäen System ; nimiavaruus Digital_Patterns.Behavioral.State { julkinen käyttöliittymä IAutomatState { String GotApplication (); StringCheckApplication ( ); String RentApartment (); StringDispenseKeys ( ); } julkinen käyttöliittymä IAutomat { void GotApplication (); void CheckApplication (); mitätön RentApartment (); void SetState ( IAutomatState s ); IAutomatState GetWaitingState (); IAutomatState GetGotApplicationState (); IAutomatState GetApartmentRentedState (); IAutomatState GetFullyRentedState (); Int32 Count { get ; asettaa ; } } public class Automat : IAutomat { yksityinen IAutomatState _waitingState ; yksityinen IAutomatState _gotApplicationState ; yksityinen IAutomatState _apartmentRentedState ; yksityinen IAutomatState _fullRentedState ; yksityinen IAutomatState _tila ; yksityinen Int32_count ; _ public Automat ( Int32 n ) { _count = n ; _waitingState = new WaitingState ( tämä ); _gotApplicationState = uusi GotApplicationState ( tämä ); _apartmentRentedState = uusi AsuntoRentedState ( tämä ); _fullRentedState = uusi FullyRentedState ( tämä ); _tila = _waitingState ; } public void GotApplication () { Konsoli . WriteLine ( _state.GotApplication ( ) ); } public void CheckApplication () { Konsoli . WriteLine ( _state.CheckApplication ( ) ); } public void RentApartment () { Konsoli . WriteLine ( _state.RentApartment ( ) ); konsoli . WriteLine ( _state . DispenseKeys ()); } public void SetState ( IAutomatState s ) { _state = s ; } public IAutomatState GetWaitingState () { return _waitingState ; } public IAutomatState GetGotApplicationState () { return _gotApplicationState ; } public IAutomatState GetApartmentRentedState () { return _apartmentRentedState ; } public IAutomatState GetFullyRentedState () { return _fullRentedState ; } public int Count { get { return _count ; } set { _count = arvo ; } } } public class WaitingState : IAutomatState { private Automat _automat ; public WaitingState ( Automaattinen automaatti ) { _automat = automaattinen ; } public String GotApplication () { _automat . SetState ( _automat . GetGotApplicationState ()); return "Kiitos hakemuksesta." ; } public String CheckApplication () { return "Sinun on lähetettävä hakemus." ; } public String RentApartment () { return "Sinun on lähetettävä hakemus." ; } public String DispenseKeys () { return "Sinun on lähetettävä hakemus." ; } } public class GotApplicationState : IAutomatState { private Automat _automat ; yksityinen vain luku Satunnainen _random ; public GotApplicationState ( Automaattinen automaatti ) { _automat = automat ; _random = new Random ( System . DateTime . Now . Millisecond ); } public String GotApplication () { return "Olemme jo saaneet hakemuksesi." ; } public String CheckApplication () { var yesNo = _random . Seuraava () % 10 ; if ( kylläEi > 4 && _automat . Count > 0 ) { _automat . SetState ( _automat . GetApartmentRentedState ()); return "Onnittelut, sinut hyväksyttiin." ; } else { _automaattinen . SetState ( _automat . GetWaitingState ()); return "Anteeksi, sinua ei hyväksytty." ; } } public String RentApartment () { return "Hakemuksesi on tarkistettava." ; } public String DispenseKeys () { return "Sinun on tarkistettava hakemuksesi." ; } } public class ApartmentRentedState : IAutomatState { yksityinen Automat _automat ; public ApartmentRentedState ( Automaattinen automaatio ) { _automat = automat ; } public String GotApplication () { return "Odota, vuokraamme sinulle asunnon." ; } public String CheckApplication () { return "Odota, vuokraamme sinulle asunnon." ; } public String RentApartment () { _automat . Count = _automat . Count - 1 ; return "Vuokraan sinulle asunnon..." ; } public String DispenseKeys () { if ( _automat . Count <= 0 ) _automat . SetState ( _automat . GetFullyRentedState ()); muuten _automaattinen . SetState ( _automat . GetWaitingState ()); return "Tässä ovat avaimesi!" ; } } public class FullyRentedState : IAutomatState { private Automat _automat ; public FullyRentedState ( Automaattinen automaatti ) { _automat = automaattinen ; } public String GotApplication () { return "Anteeksi, olemme täysin vuokrattuja." ; } public String CheckApplication () { return "Anteeksi, olemme täysin vuokrattuja." ; } public String RentApartment () { return "Anteeksi, olemme täysin vuokrattuja." ; } public String DispenseKeys () { return "Anteeksi, olemme täysin vuokrattuja." ; } } class Ohjelma { static void Main ( merkkijono [] args ) { var automat = new Automat ( 9 ); automaatti . GotApplication (); automaatti . Tarkista sovellus (); automaatti . RentApartment (); } } }Sama esimerkki ilman mallia
Lähdeteksti C# käyttäen System ; nimiavaruus Digital_Patterns.Behavioral.State { julkinen enum Tila { TÄYSI_VUOKRAUS = 0 , ODOTTAA = 1 , SOVELLUS = 2 , APARTMENT_VUOKRAUS = 3 , } public class RentalMethods { private readonly Random _random ; yksityinen Int32 _numberApartments ; yksityinen tila _tila = osavaltio . ODOTTAA ; public RentalMethods ( Int32 n ) { _numberApartments = n ; _random = new Random ( System . DateTime . Now . Millisecond ); } public void GetApplication () { switch ( _state ) { case State . FULLY_RENTED : Konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ); tauko ; tapaus valtio . WAITING : _state = Tila . GOT_APPLICATION ; konsoli . WriteLine ( "Kiitos hakemuksesta." ); tauko ; tapaus valtio . GOT_APPLICATION : Konsoli . WriteLine ( "Olemme jo saaneet hakemuksesi." ); tauko ; tapaus valtio . APARTMENT_RENTED : Konsoli . WriteLine ( "Odota, vuokraamme sinulle asunnon." ); tauko ; } } public void CheckApplication () { var yesNo = _random . seuraava ()% 10 ; kytkin ( _tila ) { case Tila . FULLY_RENTED : Konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ); tauko ; tapaus valtio . ODOTTAA : Konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ); tauko ; tapaus valtio . GOT_APPLICATION : if ( kylläEi > 4 && _numberApartments > 0 ) { Konsoli . WriteLine ( "Onnittelut, sinut hyväksyttiin." ); _state = Tila . APARTMENT_RENTED ; RentApartment (); } else { Konsoli . WriteLine ( "Anteeksi, sinua ei hyväksytty." ); _state = Tila . ODOTTAA ; } tauko ; tapaus valtio . APARTMENT_RENTED : Konsoli . WriteLine ( "Odota, vuokraamme sinulle asunnon." ); tauko ; } } public void RentApartment () { switch ( _state ) { case State . FULLY_RENTED : Konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ); tauko ; tapaus valtio . ODOTTAA : Konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ); tauko ; tapaus valtio . GOT_APPLICATION : Konsoli . WriteLine ( "Sinun on tarkistettava sovellus." ); tauko ; tapaus valtio . APARTMENT_RENTED : Konsoli . WriteLine ( "Vuokraan sinulle asunnon...." ); _numberApartments --; DispenseKeys (); tauko ; } } public void DispenseKeys () { kytkin ( _tila ) { case State . FULLY_RENTED : Konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ); tauko ; tapaus valtio . ODOTTAA : Konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ); tauko ; tapaus valtio . GOT_APPLICATION : Konsoli . WriteLine ( "Sinun on tarkistettava sovellus." ); tauko ; tapaus valtio . APARTMENT_RENTED : Konsoli . WriteLine ( "Tässä ovat avaimesi!" ); _state = Tila . ODOTTAA ; tauko ; } } } class Ohjelma { static void Main ( merkkijono [] args ) { var rentalMethods = new RentalMethods ( 9 ); vuokrausmenetelmät . GetApplication (); vuokrausmenetelmät . Tarkista sovellus (); vuokrausmenetelmät . RentApartment (); vuokrausmenetelmät . DispenseKeys (); } } }Esimerkki tilojen muuttumisesta osavaltiosta.
Lähdeteksti javascriptissä // "rajapinnan" tila toiminto Tila () { this . someMethod = funktio () { }; tämä . nextState = funktio () { }; } // tila toteutus // ensimmäisen tilan funktio StateA ( widjet ) { var duplicate = this ; // viittaus instantoituun objektiin (koska tämä voi muuttua) tämä . someMethod = function () { hälytys ( "StateA.someMethod" ); kaksoiskappale . nextState (); }; tämä . nextState = function () { hälytys ( "StateA > StateB" ); widget . onNextState ( uusi tilaB ( widjet ) ); }; } TilaA . prototyyppi = uusi valtio (); valtio A. prototyyppi . konstruktori = tilaA ; // toinen tilafunktio TilaB ( widjet ) { var duplicate = this ; tämä . someMethod = function () { hälytys ( "StateB.someMethod" ); kaksoiskappale . nextState (); }; tämä . nextState = function () { hälytys ( "StateB > StateA" ); widget . onNextState ( uusi tilaA ( widjet ) ); }; } TilaB . prototyyppi = uusi valtio (); Tila B. prototyyppi . konstruktori = tilaB ; // Widgetin "käyttöliittymä" function Widget () { tämä . someMethod = funktio () { }; tämä . onNextState = toiminto ( tila ) { }; } // Widgetin toteutus function Widget1 () { var state = new StateA ( this ); tämä . someMethod = funktio () { tila . jokin menetelmä (); }; tämä . onNextState = function ( newState ) { tila = newState ; }; } Widget1 . prototyyppi = uusi widget (); Widget1 . prototyyppi . konstruktori = Widget1 ; // käyttö var widget = uusi Widget1 (); widget . jokin menetelmä (); // StateA.someMethod // Tila > TilaB- widget . jokin menetelmä (); // StateB.someMethod // TilaB > TilaATilan muuttaminen kutsumalla menetelmää widgetissä (artikkelin englanninkielisestä versiosta).
Lähdeteksti javascriptissä // "rajapinnan" tila function AbstractTool () { this . siirtoon = funktio ( x , y ) { }; tämä . mouseDown = funktio ( x , y ) { }; tämä . hiiriUp = funktio ( x , y ) { }; } // tila toteutus // kynätyökalutoiminto PenTool ( widjet ) { var duplicate = this ; // viittaus instantoituun objektiin (koska tämä voi muuttua) var mouseIsDown = false ; // hiiren painiketta ei ole tällä hetkellä painettu var lastCoords = []; // hiiren kursorin aiemmat koordinaatit tämä . moveTo = funktio ( x , y ) { if ( mouseIsdown && lastCoords . pituus ) { drawLine ( lastCoords , [ x , y ]); } lastCoords = [ x , y ]; }; tämä . mouseDown = funktio ( x , y ) { mouseIsDown = tosi ; lastCoords = [ x , y ]; }; tämä . hiiriUp = funktio ( x , y ) { mouseIsDown = false ; }; function drawLine ( coords1 , coords2 ) { alert ( "drawLine: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } } PenTool . prototyyppi = uusi AbstractTool (); pentool . prototyyppi . konstruktori = PenTool ; // valintatyökalun toiminto SelectionTool ( widget ) { var duplicate = this ; // viittaus instantoituun objektiin (koska tämä voi muuttua) var mouseIsDown = false ; // hiiren painiketta ei ole tällä hetkellä painettu var startCoords = []; // hiiren kursorin koordinaatit, kun painiketta napsautetaan tämä . siirtokohde = funktio ( x , y ) { if ( mouseIsDown ) { setSelection ( startCoords , [ x , y ]); } }; tämä . mouseDown = funktio ( x , y ) { startCoords = [ x , y ]; mouseIsDown = tosi ; }; tämä . hiiriUp = funktio ( x , y ) { mouseIsDown = false ; }; function setSelection ( coords1 , coords2 ) { alert ( "setSelection: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } }; Valintatyökalu . prototyyppi = uusi AbstractTool (); Valintatyökalu . prototyyppi . konstruktori = SelectionTool ; // Widgetin toteutus function DrawingController () { var currentTool = new SelectionTool (); // aktiivinen instrumentti tämä . siirtoon = funktio ( x , y ) { nykyinen työkalu . siirrä kohteeseen ( x , y ); }; tämä . mouseDown = function ( x , y ) { currentTool . mouseDown ( x , y ); }; tämä . hiiriUp = function ( x , y ) { currentTool . hiiriUp ( x , y ); }; tämä . selectPenTool = toiminto () { // valitse alueen valintatyökalu currentTool = new PenTool (); }; tämä . selectSelectionTool = toiminto () { // valitse kynätyökalu currentTool = new SelectionTool (); }; } var widget = uusi DrawingController (); widget . hiiri alas ( 1 , 1 ); widget . liikkua ( 1 , 2 ); // setSelection: [1, 1] - [1, 2] widget . liikkua ( 1 , 3 ); // setSelection: [1, 1] - [1, 3] widget . hiiriUp ( 1 , 3 ); widget . liikkua ( 1 , 4 ); widget . selectPenTool (); widget . hiiri alas ( 1 , 1 ); widget . liikkua ( 1 , 2 ); // DrawLine: [1, 1] - [1, 2] widget . liikkua ( 1 , 3 ); // DrawLine: [1, 2] - [1, 3] widget . hiiriUp ( 1 , 3 ); widget . liikkua ( 1 , 4 );Mallin käyttäminen
Lähdeteksti VB.NET-kielellä Nimiavaruus Digital_Patterns.Behavioral.State Julkinen käyttöliittymä IAutomatState Function GotApplication () As [ String ] Function CheckApplication ( ) Kuten [ String ] Function RentApartment ( ) Kuten [ String ] Function DispenseKeys ( ) As [ String ] End Interface Julkinen käyttöliittymä IAutomat Sub GotApplication () Sub CheckApplication () Sub RentApartment () Sub SetState ( ByVal s As IAutomatState ) Funktio GetWaitingState () Kuten IAutomatState Function GetGotApplicationState () Kuten IAutomatState Function GetApartmentRentedState () As IAutomatState Function GetFullyRented IAutomatState ( ) Kiinteistöjen määrä ( ) Int32 - pääteliittymänä Public Class Automat toteuttaa IAutomatin Yksityinen _waitingState Kuten IAutomatState Yksityinen _gotApplicationState Kuten IAutomatState Yksityinen _apartmentRentedState Kuten IAutomatState Yksityinen _fullRentedState Kuten IAutomatState Yksityinen _state Kuten IAutomatState Yksityinen _count _ _ Julkinen ali Uusi ( ByVal n As Int32 ) _count = n _waitingState = Uusi odotustila ( minä ) _gotApplicationState = uusi hakemustila ( minä ) _apartmentRentedState = uusi asuntoVuokrattuState ( minä ) _fullS_RentedState = SubjectStateState _ _ _ _ _ _ _ _ _ Public Sub GotApplication () Toteuttaa IAutomat . GotApplicationConsole . _ WriteLine ( _state.GotApplication ( ) ) End Sub Julkinen Sub CheckApplication () Toteuttaa IAutomat . Tarkista sovelluskonsoli . WriteLine ( _state . CheckApplication ()) End Sub Julkinen Sub RentApartment () Toteuttaa IAutomat . RentApartment -konsoli . WriteLine ( _state . RentApartment ()) -konsoli . WriteLine ( _state . DispenseKeys ()) End Sub Public Sub SetState ( ByVal s As IAutomatState ) toteuttaa IAutomatin . SetState _state = s End Sub Julkinen toiminto GetWaitingState () Kuten IAutomatState toteuttaa IAutomat . GetWaitingState Return _waitingState End Function Julkinen funktio GetGotApplicationState () Kuten IAutomatState toteuttaa IAutomat . GetGotApplicationState Return _gotApplicationState End Function Julkinen toiminto GetApartmentRentedState () Kuten IAutomatState toteuttaa IAutomat . GetApartmentRentedState Return _apartmentRentedState End Function Julkinen toiminto GetFullyRentedState () Kuten IAutomatState toteuttaa IAutomat . GetFullyRentedState Return _fulllyRentedState End Function Julkisen omaisuuden määrä ( ) kokonaislukuna toteuttaa IAutomat . Count Hae Palautus _määrä Loppu Hanki Set ( ByVal arvo Kokonaislukuna ) _count = arvo Loppujoukko Lopeta Omaisuuden loppuluokka _ _ _ Public Class WaitingState toteuttaa IAutomatState Private _automatin automaattina _ Julkinen ala Uusi ( ByVal automat As Automat ) _automat = automat End Sub Julkinen funktio GotApplication () As [ String ] toteuttaa IAutomatStaten . GotApplication_automat . _ SetState ( _automat . GetGotApplicationState ()) Palaa "Kiitos sovelluksesta." lopputoiminto _ Julkinen funktio CheckApplication () As [ String ] toteuttaa IAutomatStaten . CheckApplication Return "Sinun on lähetettävä hakemus." lopputoiminto _ Julkinen toiminto RentApartment () Kuten [ merkkijono ] toteuttaa IAutomatStaten . RentApartment Return "Sinun on lähetettävä hakemus." lopputoiminto _ Julkinen funktio DispenseKeys () As [ String ] toteuttaa IAutomatStaten . DispenseKeys Return "Sinun on lähetettävä hakemus." Päätetoiminto Loppuluokka _ _ Julkinen luokka GotApplicationState toteuttaa IAutomatStaten yksityisen _automatin automaattisena yksityisenä vain lukuna _random kuten satunnaisena Uusi ( ByVal automat As Automat ) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Julkinen funktio GotApplication () As [ String ] toteuttaa IAutomatStaten . GotApplication Return "Olemme jo saaneet hakemuksesi." lopputoiminto _ Julkinen funktio CheckApplication () As [ String ] toteuttaa IAutomatStaten . CheckApplication Dim kylläNo = _satunnainen . [ Seuraava ] () Mod 10 Jos kylläEi > 4 Ja myös _automat . Count > 0 Sitten _automat . SetState ( _automat . GetApartmentRentedState ()) Return "Onnittelut, sinut hyväksyttiin." Muuten _automaattinen . SetState ( _automat . GetWaitingState ()) Return "Anteeksi, sinua ei hyväksytty." End If End -toiminto Julkinen toiminto RentApartment () Kuten [ merkkijono ] toteuttaa IAutomatStaten . RentApartment Return "Hakemuksesi on tarkistettava." lopputoiminto _ Julkinen funktio DispenseKeys () As [ String ] toteuttaa IAutomatStaten . DispenseKeys Return "Sinun on tarkistettava hakemus." Päätetoiminto Loppuluokka _ _ Julkinen luokan huoneistoRentedState toteuttaa IAutomatState Private _automatin automaattina _ Julkinen ala Uusi ( ByVal automat As Automat ) _automat = automat End Sub Julkinen funktio GotApplication () As [ String ] toteuttaa IAutomatStaten . GotApplication Return "Odota, vuokraamme sinulle asunnon." lopputoiminto _ Julkinen funktio CheckApplication () As [ String ] toteuttaa IAutomatStaten . CheckApplication Return "Odota, vuokraamme sinulle asunnon." lopputoiminto _ Julkinen toiminto RentApartment () Kuten [ merkkijono ] toteuttaa IAutomatStaten . RentApartment _automat . Count = _automat . Count - 1 Return " Vuokraan sinulle asunnon...." Lopputoiminto Julkinen funktio DispenseKeys () As [ String ] toteuttaa IAutomatStaten . DispenseKeys Jos _automat . Count <= 0 Sitten _automat . SetState ( _automat . GetFullyRentedState ()) Muu _automat . SetState ( _automat . GetWaitingState ()) End If Return "Tässä ovat avaimesi!" Päätetoiminto Loppuluokka _ _ Julkinen luokka FullyRentedState toteuttaa IAutomatState Private _automatin automaattina _ Julkinen ala Uusi ( ByVal automat As Automat ) _automat = automat End Sub Julkinen funktio GotApplication () As [ String ] toteuttaa IAutomatStaten . GotApplication Return "Anteeksi, olemme täysin vuokrattuja." lopputoiminto _ Julkinen funktio CheckApplication () As [ String ] toteuttaa IAutomatStaten . CheckApplication Return "Anteeksi, olemme täysin vuokrattuja." lopputoiminto _ Julkinen toiminto RentApartment () Kuten [ merkkijono ] toteuttaa IAutomatStaten . RentApartment Return "Anteeksi, olemme täysin vuokrattuja." lopputoiminto _ Julkinen funktio DispenseKeys () As [ String ] toteuttaa IAutomatStaten . DispenseKeys Return "Anteeksi, olemme täysin vuokrattuja." Päätetoiminto Loppuluokka _ _ Luokka Ohjelma Jaettu Sub Main ( ) Himmeä automaatti = Uusi automaatti ( 9 ) automaatti . GotApplication () automat . CheckApplication () automaattinen . Vuokra-asunto () konsoli . Lue () End Sub End Class End NamespaceSama esimerkki ilman mallia
Lähdeteksti VB.NET-kielellä Nimiavaruus Digital_Patterns.Behavioral.State Julkinen enum tila TÄYSI_VUOKRAUS = 0 ODOTTAA = 1 GOT_APPLICATION = 2 APARTMENT_RENTED = 3 End Enum Julkinen luokan vuokrausmenetelmät Yksityinen Vain luku _satunnainen Satunnaisena Yksityinen _numeroApartments As Int32 Yksityinen _tila Osavaltiona = Osavaltio . _ ODOTTAA Julkinen ala Uusi ( ByVal n As Int32 ) _numeroApartments = n _random = Uusi satunnainen ( järjestelmä . Päivämääräaika . Nyt . Millisekunti ) End Sub Julkinen Sub GetApplication ( ) Valitse Tapaus _tila Tapaustila . FULLY_RENTED- konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ) Poistu Valitse tapauksen tila . WAITING_state = Osavaltio . _ GOT_APPLICATION -konsoli . WriteLine ( "Kiitos sovelluksesta." ) Poistu Valitse tapauksen tila . GOT_APPLICATION -konsoli . WriteLine ( "Olemme jo saaneet hakemuksesi." ) Poistu Valitse tapauksen tila . APARTMENT_RENTED -konsoli . WriteLine ( "Odota, vuokraamme sinulle asunnon." ) Poistu Valitse Lopeta Valitse End Sub Julkinen Sub CheckApplication () Himmeä kylläNo = _random . [ Seuraava ] () Mod 10 Valitse Case _state Tapauksen tila . FULLY_RENTED- konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ) Poistu Valitse tapauksen tila . ODOTUS- konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ) Poistu Valitse tapauksen tila . GOT_APPLICATION Jos kylläEi > 4 JaMyös _numeroApartments > 0 Sitten konsoli . WriteLine ( "Onnittelut, sinut hyväksyttiin." ) _state = Tila . APARTMENT_RENTED RentApartment () Else Console . WriteLine ( "Anteeksi, sinua ei hyväksytty." ) _state = Tila . WAITING End If Exit Valitse Tapauksen tila . APARTMENT_RENTED -konsoli . WriteLine ( "Odota, vuokraamme sinulle asunnon." ) Poistu Valitse Lopeta Valitse End Sub Public Sub RentApartment ( ) Valitse Tapaus _tila Tapaustila . FULLY_RENTED- konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ) Poistu Valitse tapauksen tila . ODOTUS- konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ) Poistu Valitse tapauksen tila . GOT_APPLICATION -konsoli . WriteLine ( "Sinun on tarkistettava sovellus." ) Poistu Valitse tapauksen tila . APARTMENT_RENTED -konsoli . WriteLine ( "Vuokraan sinulle asunnon...." ) _numberApartments -= 1 DispenseKeys () Poistu Valitse Lopeta Valitse loppu sub Public Sub DispenseKeys ( ) Valitse Tapaus _tila Tapaustila . FULLY_RENTED- konsoli . WriteLine ( "Anteeksi, olemme täysin vuokrattuja." ) Poistu Valitse tapauksen tila . ODOTUS- konsoli . WriteLine ( "Sinun on lähetettävä hakemus." ) Poistu Valitse tapauksen tila . GOT_APPLICATION -konsoli . WriteLine ( "Sinun on tarkistettava sovellus." ) Poistu Valitse tapauksen tila . APARTMENT_RENTED -konsoli . WriteLine ( "Tässä ovat avaimesi!" ) _state = Tila . WAITING Poistu Valitse Lopeta Valitse Lopeta Sub End Class luokan ohjelma Jaettu alipää ( ) Dim rentalMethods = New RentalMethods ( 9 ) vuokrausmenetelmät . GetApplication () rentalMethods . TarkistaApplication () rentalMethods . Vuokra-asunto () vuokrausMenetelmät . DispenseKeys () konsoli . Lue () End Sub End Class End Namespace
Suunnittelumalleja | |
---|---|
Main | |
Generatiivinen | |
Rakenteellinen | |
Käyttäytyminen | |
Rinnakkaisohjelmointi _ |
|
arkkitehtoninen |
|
Java EE -mallit | |
Muut mallit | |
Kirjat | |
Persoonallisuudet |