Stat | |
---|---|
Stat | |
Type | adfærdsmæssige |
Beskrevet i Design Patterns | Ja |
State ( Eng. State ) er et adfærdsdesignmønster . Det bruges i de tilfælde, hvor objektet under afviklingen af programmet skal ændre sin adfærd afhængigt af dets tilstand.
Mønsteret består af 3 blokke:
Widget er en klasse, hvis objekter skal ændre deres adfærd afhængigt af tilstanden.
IState er en grænseflade , som hver af de konkrete stater skal implementere. Gennem denne grænseflade interagerer Widget-objektet med staten ved at uddelegere metodekald til det. Grænsefladen skal indeholde midler til feedback til det objekt, hvis adfærd skal ændres. Til dette bruges en begivenhed ( mønsterudgiver - Abonnent ). Dette er nødvendigt for at erstatte tilstandsobjektet under afviklingen af programmet, når hændelser opstår. Der kan være tidspunkter, hvor widgetten selv med jævne mellemrum poller tilstandsobjektet for en overgang.
StateA ... StateZ - klasser af konkrete tilstande. Skal indeholde information om under hvilke forhold og i hvilke tilstande objektet kan passere fra den aktuelle tilstand. For eksempel kan et objekt gå fra StateA til StateB og StateC, og fra StateB tilbage til StateA, og så videre. Objektet for en af dem skal indeholde widget'en, når den oprettes.
Det kan være svært at anvende dette mønster, hvis stater skal kommunikere, eller hvis en tilstand angiver egenskaberne for en anden. I dette tilfælde skal du bruge et globalt objekt, hvilket ikke er en særlig god arkitektonisk løsning.
Anvendelse af en skabelon
Kildetekst i C# bruger System ; navneområde Digital_Patterns.Behavioral.State { offentlig grænseflade IAutomatState { String GotApplication (); StringCheckApplication ( ); String RentApartment (); StringDispenseKeys ( ); } offentlig grænseflade IAutomat { void GotApplication (); void CheckApplication (); void RentApartment (); void SetState ( IAutomatState s ); IAutomatState GetWaitingState (); IAutomatState GetGotApplicationState (); IAutomatState GetApartmentRentedState (); IAutomatState GetFullyRentedState (); Int32 Count { get ; sæt ; } } public class Automat : IAutomat { privat IAutomatState _waitingState ; privat IAutomatState _gotApplicationState ; privat IAutomatState _apartmentRentedState ; privat IAutomatState _fullyRentedState ; privat IAutomatState _state ; privat Int32_count ; _ public Automat ( Int32 n ) { _count = n ; _waitingState = ny WaitingState ( dette ); _gotApplicationState = ny GotApplicationState ( dette ); _apartmentRentedState = new ApartmentRentedState ( dette ); _fullyRentedState = ny FullyRentedState ( dette ); _state = _waitingState ; } public void GotApplication () { Console . WriteLine ( _state.GotApplication ( ) ); } public void CheckApplication () { Console . WriteLine ( _state.CheckApplication ( ) ); } public void RentApartment () { Konsol . WriteLine ( _state.RentApartment ( ) ); Konsol . 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 _fullyRentedState ; } public int Count { get { return _count ; } sæt { _count = værdi ; } } } public class WaitingState : IAutomatState { privat Automat _automat ; public WaitingState ( Automat automat ) { _automat = automat ; } public String GotApplication () { _automat . SetState ( _automat . GetGotApplicationState ()); return "Tak for ansøgningen." ; } public String CheckApplication () { return "Du skal indsende en ansøgning." ; } public String RentApartment () { return "Du skal indsende en ansøgning." ; } public String DispenseKeys () { return "Du skal indsende en ansøgning." ; } } public class GotApplicationState : IAutomatState { privat Automat _automat ; privat skrivebeskyttet Tilfældig _random ; public GotApplicationState ( Automat automat ) { _automat = automat ; _random = new Random ( System . DateTime . Now . Millisecond ); } public String GotApplication () { return "Vi har allerede din ansøgning." ; } public String CheckApplication () { var yesNo = _random . Næste () % 10 ; if ( yesNo > 4 && _automat . Count > 0 ) { _automat . SetState ( _automat . GetApartmentRentedState ()); return "Tillykke, du blev godkendt." ; } andet { _automatic . SetState ( _automat . GetWaitingState ()); return "Beklager, du blev ikke godkendt." ; } } public String RentApartment () { return "Du skal have tjekket din ansøgning." ; } public String DispenseKeys () { return "Du skal have din ansøgning tjekket." ; } } public class ApartmentRentedState : IAutomatState { private Automat _automat ; public ApartmentRentedState ( automat automat ) { _automat = automat ; } public String GotApplication () { return "Hold nu op, vi lejer dig en lejlighed." ; } public String CheckApplication () { return "Hold nu op, vi lejer dig en lejlighed." ; } public String RentApartment () { _automat . Antal = _automat . Tæl - 1 ; returnere "Lejer dig en lejlighed...." ; } public String DispenseKeys () { if ( _automat . Count <= 0 ) _automat . SetState ( _automat . GetFullyRentedState ()); andet _automatisk . SetState ( _automat . GetWaitingState ()); retur "Her er dine nøgler!" ; } } public class FullyRentedState : IAutomatState { private Automat _automat ; public FullyRentedState ( Automat automat ) { _automat = automat ; } public String GotApplication () { return "Beklager, vi er fuldt udlejet." ; } public String CheckApplication () { return "Beklager, vi er fuldt udlejet." ; } public String RentApartment () { return "Beklager, vi er fuldt udlejet." ; } public String DispenseKeys () { return "Beklager, vi er fuldt udlejet." ; } } klasse Program { static void Main ( string [] args ) { var automat = new Automat ( 9 ); automat . GotApplication (); automat . CheckApplication (); automat . RentApartment (); } } }Samme eksempel uden at anvende skabelonen
Kildetekst i C# bruger System ; navneområde Digital_Patterns.Behavioral.State { public enum State { FULLY_RENTED = 0 , WAITING = 1 , GOT_APPLICATION = 2 , APARTMENT_RENTED = 3 , } public class RentalMethods { private readonly Random _random ; privat Int32 _numberApartments ; privat stat _stat = stat . VENTER ; offentlige lejemetoder ( Int32 n ) { _numberApartments = n ; _random = new Random ( System . DateTime . Now . Millisecond ); } public void GetApplication () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Beklager, vi er fuldt udlejet." ); bryde ; sagsstat . _ WAITING : _state = Tilstand . GOT_APPLICATION ; Konsol . WriteLine ( "Tak for ansøgningen." ); bryde ; sagsstat . _ GOT_APPLICATION : Konsol . WriteLine ( "Vi har allerede din ansøgning." ); bryde ; sagsstat . _ APARTMENT_RENTED : Konsol . WriteLine ( "Hold nu op, vi lejer dig en lejlighed." ); bryde ; } } public void CheckApplication () { var yesNo = _random . næste ()% 10 ; switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Beklager, vi er fuldt udlejet." ); bryde ; sagsstat . _ VENTER : Konsol . WriteLine ( "Du skal indsende en ansøgning." ); bryde ; sagsstat . _ GOT_APPLICATION : if ( yesNo > 4 && _numberApartments > 0 ) { Console . WriteLine ( "Tillykke, du blev godkendt." ); _state = tilstand . APARTMENT_RENTED ; RentApartment (); } andet { Konsol . WriteLine ( "Beklager, du blev ikke godkendt." ); _state = tilstand . VENTER ; } bryde ; sagsstat . _ APARTMENT_RENTED : Konsol . WriteLine ( "Hold nu op, vi lejer dig en lejlighed." ); bryde ; } } public void RentApartment () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Beklager, vi er fuldt udlejet." ); bryde ; sagsstat . _ VENTER : Konsol . WriteLine ( "Du skal indsende en ansøgning." ); bryde ; sagsstat . _ GOT_APPLICATION : Konsol . WriteLine ( "Du skal have din ansøgning tjekket." ); bryde ; sagsstat . _ APARTMENT_RENTED : Konsol . WriteLine ( "Lejer en lejlighed til dig...." ); _numberLejligheder --; Dispense Keys (); bryde ; } } public void DispenseKeys () { switch ( _state ) { case State . FULLY_RENTED : Konsol . WriteLine ( "Beklager, vi er fuldt udlejet." ); bryde ; sagsstat . _ VENTER : Konsol . WriteLine ( "Du skal indsende en ansøgning." ); bryde ; sagsstat . _ GOT_APPLICATION : Konsol . WriteLine ( "Du skal have din ansøgning tjekket." ); bryde ; sagsstat . _ APARTMENT_RENTED : Konsol . WriteLine ( "Her er dine nøgler!" ); _state = tilstand . VENTER ; bryde ; } } } klasse Program { static void Main ( string [] args ) { var rentalMethods = new RentalMethods ( 9 ); udlejningsmetoder . GetApplication (); udlejningsmetoder . CheckApplication (); udlejningsmetoder . RentApartment (); udlejningsmetoder . Dispense Keys (); } } }Et eksempel med skiftende stater fra stat.
Kildetekst i javascript // "interface" tilstand function State () { this . someMethod = funktion () { }; dette . nextState = funktion () { }; } // statens implementering // første tilstandsfunktion StateA ( widjet ) { var duplicate = this ; // reference til det instansierede objekt (fordi dette kan ændre sig) dette . someMethod = function () { alert ( "StateA.someMethod" ); duplikat . næste stat (); }; dette . nextState = function () { alert ( "StateA > StateB" ); widget . onNextState ( ny StateB ( widjet ) ); }; } TilstandA . prototype = ny tilstand (); stat A. prototype . konstruktør = StateA ; // anden tilstand funktion StateB ( widjet ) { var duplicate = this ; dette . someMethod = function () { alert ( "StateB.someMethod" ); duplikat . næste stat (); }; dette . nextState = function () { alert ( "StateB > StateA" ); widget . onNextState ( ny StateA ( widjet ) ); }; } StateB . prototype = ny tilstand (); StateB . prototype . konstruktør = StateB ; // Widget "interface" function Widget () { denne . someMethod = funktion () { }; dette . onNextState = funktion ( tilstand ) { }; } // Widget implementering function Widget1 () { var state = new StateA ( this ); dette . someMethod = function () { state . en eller anden metode (); }; dette . onNextState = funktion ( newState ) { state = newState ; }; } Widget1 . prototype = ny widget (); Widget 1 . prototype . konstruktør = Widget1 ; // brug var widget = ny widget1 (); widget . en eller anden metode (); // StateA.someMethod // StateA > StateB widget . en eller anden metode (); // StateB.someMethod // StateB > StateAÆndring af tilstande ved at kalde en metode på Widget'en (fra den engelske version af artiklen).
Kildetekst i javascript // "interface" tilstand function AbstractTool () { this . moveTo = funktion ( x , y ) { }; dette . mouseDown = funktion ( x , y ) { }; dette . mouseUp = funktion ( x , y ) { }; } // statens implementering // pencil tool function PenTool ( widjet ) { var duplicate = this ; // reference til det instansierede objekt (fordi dette kan ændre sig) var mouseIsDown = false ; // museknappen er ikke trykket i øjeblikket var lastCoords = []; // tidligere koordinater for musemarkøren dette . moveTo = function ( x , y ) { if ( mouseIsDown && lastCoords . length ) { drawLine ( lastCoords , [ x , y ]); } lastCoords = [ x , y ]; }; dette . mouseDown = funktion ( x , y ) { mouseIsDown = sand ; lastCoords = [ x , y ]; }; dette . mouseUp = funktion ( x , y ) { mouseIsDown = false ; }; function drawLine ( coords1 , coords2 ) { alert ( "drawLine: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } } PenTool . prototype = nyt abstrakt værktøj (); pentool . prototype . konstruktør = PenTool ; // Selection Tool funktion SelectionTool ( widget ) { var duplicate = this ; // reference til det instansierede objekt (fordi dette kan ændre sig) var mouseIsDown = false ; // museknappen er ikke trykket i øjeblikket var startCoords = []; // koordinater for musemarkøren, når der klikkes på knappen dette . moveTo = function ( x , y ) { if ( mouseIsDown ) { setSelection ( startCoords , [ x , y ]); } }; dette . mouseDown = funktion ( x , y ) { startCoords = [ x , y ]; mouseIsDown = sand ; }; dette . mouseUp = funktion ( x , y ) { mouseIsDown = false ; }; function setSelection ( coords1 , coords2 ) { alert ( "setSelection: [" + coords1 [ 0 ] + ", " + coords1 [ 1 ] + "] - [" + coords2 [ 0 ] + ", " + coords2 [ 1 ] + "]" ); } }; Selection Tool . prototype = nyt abstrakt værktøj (); Selection Tool . prototype . konstruktør = SelectionTool ; // Widget implementering function DrawingController () { var currentTool = new SelectionTool (); // aktivt instrument dette . moveTo = function ( x , y ) { currentTool . moveTo ( x , y ); }; dette . mouseDown = funktion ( x , y ) { currentTool . mousedown ( x , y ); }; dette . mouseUp = funktion ( x , y ) { currentTool . mouseUp ( x , y ); }; dette . selectPenTool = function () { // vælg områdevalgsværktøjet currentTool = new PenTool (); }; dette . selectSelectionTool = function () { // vælg blyantværktøjet currentTool = new SelectionTool (); }; } var widget = new DrawingController (); widget . musened ( 1 , 1 ); widget . moveTo ( 1 , 2 ); // setSelection: [1, 1] - [1, 2] widget . moveTo ( 1 , 3 ); // setSelection: [1, 1] - [1, 3] widget . mouseUp ( 1 , 3 ); widget . moveTo ( 1 , 4 ); widget . selectPenTool (); widget . musened ( 1 , 1 ); widget . moveTo ( 1 , 2 ); // drawLine: [1, 1] - [1, 2] widget . moveTo ( 1 , 3 ); // drawLine: [1, 2] - [1, 3] widget . mouseUp ( 1 , 3 ); widget . moveTo ( 1 , 4 );Anvendelse af en skabelon
Kildetekst på VB.NET sprog Navneområde Digital_Patterns.Behavioral.State Offentlig grænseflade IAutomatState Funktion GotApplication () Som [ String ] Funktion CheckApplication () Som [ String ] Funktion RentApartment () Som [ String ] Funktion DispenseKeys ( ) Som [ String ] Slutgrænseflade Offentlig grænseflade IAutomat Sub GotApplication () Sub CheckApplication () Sub RentApartment () Sub SetState ( ByVal s As IAutomatState ) Funktion GetWaitingState () Som IAutomatState Funktion GetGotApplicationState () Som IAutomatState Funktion GetApartmentRentedState () Som IAutomatState Funktion GetFullyRentedState () Som IAutomatState Property Count () Som Int32 End Interface Public Class Automat implementerer IAutomat Private _waitingState As IAutomatState Private _gotApplicationState As IAutomatState Private _apartmentRentedState As IAutomatState Private _fullyRentedState As IAutomatState Private _state As IAutomatState Private _count As Int32 Public Sub New ( ByVal n As Int32 ) _count = n _waitingState = New WaitingState ( Me ) _gotApplicationState = New GotApplicationState ( Me ) _apartmentRentedState = New ApartmentRentedState ( Me ) _StatfullyRentedState = New FullyRentedState _ New FullyRentedState _ Endstate _ _ _ Public Sub GotApplication () Implementerer IAutomat . GotApplicationConsole . _ WriteLine ( _state.GotApplication ( ) ) End Sub Public Sub CheckApplication () Implementerer IAutomat . CheckApplication Console . WriteLine ( _state . CheckApplication ()) End Sub Public Sub RentApartment () Implementerer IAutomat . RentApartment Console . WriteLine ( _state . RentApartment ()) Konsol . WriteLine ( _state . DispenseKeys ()) End Sub Public Sub SetState ( ByVal s As IAutomatState ) Implementerer IAutomat . SetState _state = s End Sub Offentlig funktion GetWaitingState () Som IAutomatState implementerer IAutomat . GetWaitingState Returner _waitingState Slutfunktion _ Offentlig funktion GetGotApplicationState () Som IAutomatState implementerer IAutomat . GetGotApplicationState Returner _gotApplicationState Slutfunktion _ Offentlig funktion GetApartmentRentedState () Som IAutomatState implementerer IAutomat . GetApartmentRentedState Return _apartmentRentedState Slutfunktion _ Offentlig funktion GetFullyRentedState () Som IAutomatState implementerer IAutomat . GetFullyRentedState Returner _fullyRentedState Slutfunktion _ Offentlig ejendomstælling ( ) Som heltal implementerer IAutomat . Count Get Return _count End Get Set ( ByVal value As Integer ) _count = value End Set End Property End Class Offentlig klasse WaitingState Implementerer IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerer IAutomatState . GotApplication_automat . _ SetState ( _automat . GetGotApplicationState ()) Returner "Tak for ansøgningen." afslutte funktion Public Function CheckApplication () Som [ String ] Implementerer IAutomatState . CheckApplication Return "Du skal indsende en ansøgning." afslutte funktion Public Function RentApartment () Som [ String ] Implementerer IAutomatState . RentApartment Retur "Du skal indsende en ansøgning." afslutte funktion Public Function Dispense Keys () Som [ String ] Implementerer IAutomatState . DispenseKeys Return "Du skal indsende en ansøgning." Slutfunktion Slutklasse _ _ Public Class GotApplicationState implementerer IAutomatState Private _automat As Automat Private ReadOnly _random As Random Public Sub New ( ByVal automat As Automat ) _automat = automat _random = New Random ( System . DateTime . Now . Millisecond ) End Sub Public Function GotApplication () Som [ String ] Implementerer IAutomatState . GotApplication Return "Vi har allerede modtaget din ansøgning." afslutte funktion Public Function CheckApplication () Som [ String ] Implementerer IAutomatState . CheckApplication Dim yesNo = _random . [ Næste ] () Mod 10 Hvis jaNej > 4 OgOgså _automat . Tæl > 0 Derefter _automat . SetState ( _automat . GetApartmentRentedState ()) Returner "Tillykke, du blev godkendt." Ellers _automatisk . SetState ( _automat . GetWaitingState ()) Returner "Beklager, du blev ikke godkendt." End If End- funktion Public Function RentApartment () Som [ String ] Implementerer IAutomatState . RentApartment Retur "Du skal have tjekket din ansøgning." afslutte funktion Public Function Dispense Keys () Som [ String ] Implementerer IAutomatState . DispenseKeys Return "Du skal have din ansøgning tjekket." Slutfunktion Slutklasse _ _ Public Class ApartmentRentedState Implementerer IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerer IAutomatState . GotApplication Return "Hold nu op, vi lejer dig en lejlighed." afslutte funktion Public Function CheckApplication () Som [ String ] Implementerer IAutomatState . CheckApplication Return "Hold nu op, vi lejer dig en lejlighed." afslutte funktion Public Function RentApartment () Som [ String ] Implementerer IAutomatState . RentApartment _automat . Antal = _automat . Count - 1 Return "Lejer en lejlighed til dig...." Afslut funktion Public Function Dispense Keys () Som [ String ] Implementerer IAutomatState . Dispense Keys If _automat . Tæl <= 0 Derefter _automat . SetState ( _automat . GetFullyRentedState ()) Else _automat . SetState ( _automat . GetWaitingState ()) End If Return "Her er dine nøgler!" Slutfunktion Slutklasse _ _ Public Class FullyRentedState Implementerer IAutomatState Private _automat As Automat Public Sub New ( ByVal automat As Automat ) _automat = automat End Sub Public Function GotApplication () Som [ String ] Implementerer IAutomatState . GotApplication Return "Beklager, vi er fuldt udlejet." afslutte funktion Public Function CheckApplication () Som [ String ] Implementerer IAutomatState . CheckApplication Return "Beklager, vi er fuldt udlejet." afslutte funktion Public Function RentApartment () Som [ String ] Implementerer IAutomatState . RentApartment Return "Beklager, vi er fuldt udlejet." afslutte funktion Public Function Dispense Keys () Som [ String ] Implementerer IAutomatState . DispenseKeys Return "Beklager, vi er fuldt udlejet." Slutfunktion Slutklasse _ _ Klasse Program Delt Sub Main () Dim automat = New Automat ( 9 ) automat . GotApplication () automat . CheckApplication () automat . Lejelejlighed () Konsol . Læs () End Sub End Class End NamespaceSamme eksempel uden at anvende skabelonen
Kildetekst på VB.NET sprog Navneområde Digital_Patterns.Behavioral.State Public Enum State FULLY_RENTED = 0 WAITING = 1 GOT_APPLICATION = 2 APARTMENT_RENTED = 3 End Enum Offentlig klasseudlejning Metoder Privat læseKun _tilfældig Som Tilfældig Privat _antalLejligheder Som Int32 Privat _stat Som Tilstand = Tilstand . VENTER Public Sub New ( ByVal n As Int32 ) _numberApartments = n _random = New Random ( System . DateTime . Now . Millisecond ) End Sub Public Sub GetApplication ( ) Vælg Sag _state Sagstilstand . FULLY_RENTED Konsol . WriteLine ( "Beklager, vi er fuldt udlejet. " ) Afslut Vælg sagstilstand . WAITING_state = tilstand . _ GOT_APPLICATION- konsol . WriteLine ( "Tak for ansøgningen. " ) Afslut Vælg sagstilstand . GOT_APPLICATION- konsol . WriteLine ( "Vi har allerede din ansøgning. " ) Afslut Vælg sagstilstand . APARTMENT_RENTED Konsol . WriteLine ( "Vent nu, vi lejer dig en lejlighed." ) Afslut Vælg End Vælg End Sub Offentlig underkontrolapplikation ( ) Dæmp yesNo = _random . [ Næste ] () Mod 10 Vælg Sag _tilstand Sagstilstand . _ FULLY_RENTED Konsol . WriteLine ( "Beklager, vi er fuldt udlejet. " ) Afslut Vælg sagstilstand . VENTENDE konsol . WriteLine ( "Du skal indsende en ansøgning. " ) Afslut Vælg sagstilstand . GOT_APPLICATION Hvis jaNej > 4 OgOgså _antalLejligheder > 0 Så Konsol . WriteLine ( "Tillykke, du blev godkendt." ) _state = State . APARTMENT_RENTED RentApartment () Else Console . WriteLine ( "Beklager, du blev ikke godkendt." ) _state = State . WAITING End If Exit Vælg Sagstilstand . _ APARTMENT_RENTED Konsol . WriteLine ( "Vent nu, vi lejer dig en lejlighed." ) Afslut Vælg End Vælg End Sub Offentlig underlejelejlighed ( ) Vælg sag _state sagstilstand . _ FULLY_RENTED Konsol . WriteLine ( "Beklager, vi er fuldt udlejet. " ) Afslut Vælg sagstilstand . VENTENDE konsol . WriteLine ( "Du skal indsende en ansøgning. " ) Afslut Vælg sagstilstand . GOT_APPLICATION- konsol . WriteLine ( "Du skal have din applikation kontrolleret. " ) Afslut Vælg sagstilstand . APARTMENT_RENTED Konsol . WriteLine ( "Lejer dig en lejlighed...." ) _numberApartments -= 1 DispenseKeys () Afslut Vælg Afslut Vælg ende under Public Sub Dispense Keys ( ) Vælg Sag _state Sagstilstand . FULLY_RENTED Konsol . WriteLine ( "Beklager, vi er fuldt udlejet. " ) Afslut Vælg sagstilstand . VENTENDE konsol . WriteLine ( "Du skal indsende en ansøgning. " ) Afslut Vælg sagstilstand . GOT_APPLICATION- konsol . WriteLine ( "Du skal have din applikation kontrolleret. " ) Afslut Vælg sagstilstand . APARTMENT_RENTED Konsol . WriteLine ( "Her er dine nøgler!" ) _state = State . VENTER Afslut Vælg Afslut Vælg End Sub End Class klasse program Shared Sub Main () Dim lejeMethods = New RentalMethods ( 9 ) udlejningsmetoder . GetApplication () rentalMethods . CheckApplication () lejemetoder . LejeLejlighed () lejemetoder . Dispense Keys () Konsol . Læs () End Sub End Class End Namespace
Design mønstre | |
---|---|
Hoved | |
Generativ | |
Strukturel | |
Adfærdsmæssigt | |
Parallel programmering |
|
arkitektonisk |
|
Java EE skabeloner | |
Andre skabeloner | |
Bøger | |
Personligheder |